2013-05-16 118 views
0

我們正在使用ASP.NET 3和.NET 4以及一些不同的IIS(7,8和Express版本)。爲什麼我們的請求需要很長時間才能返回?

所有到服務器的請求都需要一個長的時間才能返回,大約10秒左右,無論請求什麼。我們可以看到(通過附加調試器)即時調用控制器方法並快速返回(毫秒)。

我們還可以看到,當GET完成時,瀏覽器快速完成渲染等(毫秒)。所以延遲在例如'返回查看(無論)'和GET完成。這對我來說就像View編譯 - 但它發生在每個請求上,所以不應該在第一個請求之後編譯View?

我們可以使用View預編譯,但不幸的是啓用它會導致很多錯誤,我們並不想重建整個Web項目,以使其工作。正如我上面所說的,一個視圖應該在首次使用時編譯,所以預編譯應該只對使用特定視圖的第一個請求有幫助。

任何想法如何診斷,並找出什麼是真正花費時間?


編輯:取出每個頁面上呈現的部分視圖之一後,突然間一切都會更快。現在調查該視圖。

+2

您使用過.net分析器工具嗎? – asawyer

+1

如果您啓動IE並點擊F12並轉到網絡選項卡,那麼它會在每個請求中顯示多長時間? – Nate

+1

你看過客戶網絡配置文件嗎? Chrome有一個很好的工具,點擊F12,點擊「網絡」並加載頁面,看看有什麼需要這麼長時間。 –

回答

1

罪魁禍首代碼如下所示:

itemFactory.Add() 
    .Text(menuItem.Caption) 
    .Selected(menuItem.Selected) 
    .Action(menuItem.Action, menuItem.Controller) 
    .Enabled(menuItem.Enabled) 
    .Visible(menuItem.Visible) 
    ; 

此C#代碼建立一個Telerik的PanelBar(菜單)。這個'流暢的界面'的各種方法是在正在添加的項目上設置屬性。

不幸的是,一種方法並不如你所期望的那樣:Action(actionName,controllerName)。

與單擊PanelBar項目時設置要執行的控制器操作不同,調用此方法實際上是在控制器上執行操作。

看來這是異步完成的,然而,跟蹤上面的代碼表明它幾乎是立即運行,因此它被排除了。

解決的辦法是使用Url方法,而不是Action方法,並使用ASP.NET MVC Url方法構建Url。這是相當反直覺的,因爲Telerik的ASP.NET MVC框架,肯定應該與MVC第一和URL工作第二,但我們應該有:

  1. 諮詢文件,而不是假設用什麼方法做
  2. 注意到,應用程序突然被一個大型固定 量越來越慢,在每個頁面加載

我已經運行探查後一直毫無頭緒,因爲它似乎是控制器方法被調用,我沒想到 - 和來電的來源似乎來自Telerik的代碼(不是我們的)。當我最終發現Action()正在做什麼時,我一次只刪除了一部分導航局部視圖。

異步代碼是偉大的,除非當您嘗試調試/配置文件,並找不到它的調用!

感謝您對評論中的建議。

相關問題