2010-08-19 77 views
0

在調試我的Visual Studio 2010 MVC2解決方案時,我注意到了一些我不一定期待的事情,這讓我感到效率低下。當我查看主頁時,IntelliTrace顯示許多異常在解析局部視圖時被拋出並被捕獲。MVC2部分視圖在解析視圖的路徑時拋出/捕獲異常

我有一些代碼調用這樣的局部視圖:

<% Html.RenderPartial("FiltersAvailablePartialView", Model.AvailableFilters); %> 

在項目視圖的結構遵循典型的MVC應用程序。有一個視圖文件夾,其中包含兩個文件夾,主頁和共享。在Home文件夾中,我有用作我的主視圖頁面的.aspx頁面,在Shared文件夾中,我有一個用作部分視圖的.ascx頁面,如下所示(其他視圖和部分視圖未列出爲簡單起見):

查看

    - >首頁

                - > Home.aspx

    - >共享

                - > FiltersAvailablePartialView.ascx

我在的IntelliTrace看到了什麼,當我加載頁面,這些異常被拋出和捕獲:

引發:「文件'/MyApp/Views/Home/FiltersAvailablePartialView.aspx'不存在。」

捕獲:「文件'/MyApp/Views/Home/FiltersAvailablePartialView.aspx'不存在。」

引發:「文件'/MyApp/Views/Home/FiltersAvailablePartialView.ascx'不存在。」

被捕獲:「該文件'/MyApp/Views/Home/FiltersAvailablePartialView.ascx'不存在。」

引發:「文件'/MyApp/Views/Shared/FiltersAvailablePartialView.aspx'不存在。」

捕獲:「文件'/MyApp/Views/Shared/FiltersAvailablePartialView.aspx'不存在。」

因此,.Net框架似乎使用了昂貴的try/catch方法來解析視圖 - 首先查找Home文件夾中的.aspx視圖,然後查看Home文件夾中的.ascx視圖,然後查看Shared文件夾中的.aspx視圖,然後是Shared文件夾中的.ascx視圖。因此,儘管它最終發現部分視圖和頁面沒有任何錯誤地呈現,但這看起來像是一種昂貴的方式(捕捉異常)來查找視圖。

是否有MVC2框架內建的內容我可以/應該做些什麼來使它在第一次嘗試時解決這個局部視圖引用並避免這些代價高昂的try/catch調用正在發生?

+0

它們的代價如何?他們是否永遠爲你呈現你的網頁? – XstreamINsanity 2010-08-19 19:16:32

回答

3

如果您在發佈模式下編譯,這隻會發生一次。如果您在調試模式下編譯,則會發生每個請求。

調試模式下的分析通常與實際性能的相關性非常有限。

+0

謝謝。由於我在運行調試器時注意到了這一點,這就解釋了爲什麼我看到了我沒有想到的這種行爲。當然,除了調試之外,我還可以在發佈模式下進行編譯(如真正的分析或釋放代碼)。 – Shawn 2010-08-19 19:20:23