性能优化2
现在回过头来看前面的代码,其实并没有做什么性能优化,仅仅时给大家提个醒而已。在Code 2中,我们的遍历代码放在了主页面中,即在每一次迭代中调用RenderPartial方法,尽管ASP.NET MVC在RenderPartial时,对于UserControl路径做了缓存,但是200次的调用仍然有不小的开销。如果我们的遍历代码放在UserControl中,而在主页面中只进行一次调用RenderPartial方法,结果又将如何呢?修改UserControl为下代码所示:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IList<Comment>>" %>
<%@ Import Namespace="TerryLee.MvcPerformance01.Models" %>
<%
foreach(Comment comment in Model)
{
%>
<p>
ID: <%= comment.ID%> <br />
Author: <%= comment.Author%> <br />
Description: <%= comment.Description%>
</p>
<%} %>
<hr />
<%@ Import Namespace="TerryLee.MvcPerformance01.Models" %>
<%
foreach(Comment comment in Model)
{
%>
<p>
ID: <%= comment.ID%> <br />
Author: <%= comment.Author%> <br />
Description: <%= comment.Description%>
</p>
<%} %>
<hr />
这样在主页面中,只进行一次RenderPartial调用,如下代码所示:
<div>
<%
Html.RenderPartial("CommentsItem", Model.Comments);
%>
</div>
<%
Html.RenderPartial("CommentsItem", Model.Comments);
%>
</div>
此时再次测试,可以看到呈现200条评论所花费的时间不足1ms!为了直观期间,我们仍然使用图形表示如下:

图3 优化数据对比
从上图中可以看到,通过在UserControl中进行遍历,减少RenderPartial方法调用,带来的性能提升还是非常可观的。
总结
本文主要讨论在ASP.NET MVC中使用RenderPartial方法时的一些性能问题,记住两点:一是在ASP.NET MVC应用程序发布到生产服务器时,别忘了关闭Debug模式(对于ASP.NET WebForm应用程序也是一样);二时尽可能的减少调用RenderPartial方法的次数,如通过在UserControl中进行遍历等方法。希望对大家有用。