我只是碰巧检查了我们正在构建的ASP.NET MVC应用程序的性能。我打算将一个局部视图插入到一个循环中,出于好奇,我检查了渲染页面需要多长时间。结果并不好。
我需要做更多的结论调查,但以防有人有类似的问题或更有洞察力,这是我到目前为止所掌握的。首先,我应该说所有的结果和测量都是在多个页面加载之后完成的,并且我已经在web.config中设置了<compilation debug="false">
。
<my:UserContol runat="server" />
)包含相同的部分视图时,额外的60毫秒就消失了。因此,根据上面的观察,罪魁祸首似乎是BuildManager.CreateInstanceFromVirtualPath方法。也许,它并不意味着要被多次调用。Webforms大概不会使用它;或者每个ascx只使用一次?
发布于 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秒,这非常确凿地证明了调用分部视图时存在显著的开销。我确信当你有一个单独的调用时,这是可以忽略的,但是在一个循环中,所有这些都会加在一起,所以我建议尽可能避免在循环中使用部分视图。
发布于 2010-09-02 19:58:14
我猜答案是...那得看情况?
部分视图会降低性能(实际调用的开销等)。
不缓存分部视图。
在循环中包含部分视图会降低性能,并且可以通过将循环移动到部分视图中来再次加速。
可以在here中找到一些样例读取(引用视图路径的缓存)。
发布于 2010-09-22 15:21:26
60ms是一个如此小的间隔,对我来说,它听起来像是统计上的噪音,而不是性能差异的确凿证据。
https://stackoverflow.com/questions/3626272
复制相似问题