2010-08-19 80 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