首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ASP.NET MVC局部视图速度慢?

ASP.NET MVC局部视图速度慢?
EN

Stack Overflow用户
提问于 2010-09-02 18:37:36
回答 3查看 9.1K关注 0票数 21

我只是碰巧检查了我们正在构建的ASP.NET MVC应用程序的性能。我打算将一个局部视图插入到一个循环中,出于好奇,我检查了渲染页面需要多长时间。结果并不好。

我需要做更多的结论调查,但以防有人有类似的问题或更有洞察力,这是我到目前为止所掌握的。首先,我应该说所有的结果和测量都是在多个页面加载之后完成的,并且我已经在web.config中设置了<compilation debug="false">

  • 似乎单个渲染部分会产生大约5ms的命中(至少在我的环境中是这样)。当我内联部分视图的实际内容时,我实际上得到了0MS.
  • 当我将一个空的部分视图包含到一个大约有70个元素的循环中时,总呈现时间增加了大约60ms。所以大概有一些缓存,但这并不理想。
  • 我调试了ASP.NET MVC,发现缓存了部分视图,但它只缓存了指向ascx的路径。然后每次使用BuildManager.CreateInstanceFromVirtualPath方法实例化实际视图。
  • 现在有趣的一点是:当使用WebForms语法(<my:UserContol runat="server" />)包含相同的部分视图时,额外的60毫秒就消失了。

因此,根据上面的观察,罪魁祸首似乎是BuildManager.CreateInstanceFromVirtualPath方法。也许,它并不意味着要被多次调用。Webforms大概不会使用它;或者每个ascx只使用一次?

EN

回答 3

Stack Overflow用户

发布于 2012-02-12 06:30:29

我刚刚将MVC2视图从在循环中使用局部视图更改为单个视图,即:

<table>
foreach(var a in items)
{
  <%: Html.Partial("SomePartialView",a) %>
}
</table>

其中SomePartialView包含在表中呈现单行的代码,例如:

<tr><td>Model.Name</td><td>Model.description</td></tr>

至:

foreach(var a in items)
{
  <tr><td>a.Name</td><td>a.description</td></tr>
}

对于呈现900行的视图,页面呈现时间从5+分钟页面加载下降到不到30秒,这非常确凿地证明了调用分部视图时存在显著的开销。我确信当你有一个单独的调用时,这是可以忽略的,但是在一个循环中,所有这些都会加在一起,所以我建议尽可能避免在循环中使用部分视图。

票数 11
EN

Stack Overflow用户

发布于 2010-09-02 19:58:14

我猜答案是...那得看情况?

部分视图会降低性能(实际调用的开销等)。

不缓存分部视图。

在循环中包含部分视图会降低性能,并且可以通过将循环移动到部分视图中来再次加速。

可以在here中找到一些样例读取(引用视图路径的缓存)。

票数 2
EN

Stack Overflow用户

发布于 2010-09-22 15:21:26

60ms是一个如此小的间隔,对我来说,它听起来像是统计上的噪音,而不是性能差异的确凿证据。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3626272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档