慢嵌套RenderPartial响应时间

时间:2010-09-12 15:11:48

标签: asp.net-mvc partial-views response-time

我有一个由嵌套的Html.RenderPartials构建的asp.net视图/页面(动态)。视图被发送到适当的视图模型以进行渲染。

Firebug表示,对于9.5KB,HTML的GET响应为9.89秒。 比较同一站点的FAQ页面(静态html)是17K的1.3秒。

起初我认为由于viewmodel的复杂性,SQL Entity后端会减慢速度,但根据我的日志,它似乎在不到1秒的时间内构建了viewmodel。

任何想法为什么MVC视图花了这么长时间来呈现,以及如何加快速度?我正在考虑通过ajax进行部分加载。

(顺便说一句,我Gzip和使用CDN等 - 我已经把整个网站都弄死了)

修改

为OnActionExecuting / OnActionExecuted和OnResultExecuting / OnResultExecuted添加了计时器(秒表)。

09/12/2010 18:39:20:主持人:简介行动:索引经过时间:680.6431 - 行动

09/12/2010 18:39:29:财务主管:简介行动:指数已用时间:9202.063 - 结果

框架渲染视图的时间为9秒。

1 个答案:

答案 0 :(得分:2)

解决了问题

首先感谢大家的建议。我一次又一次地遵循每个建议,直到找到问题为止。这是错误的,也许有人可以为其他人澄清。

VS2010性能向导说每个传递给PartialViews的对象占用了大量的CPU时间,我认为它是部分的,因为我读过它们可能有问题。

foreach (ProfileComment item in Model)
{
    Html.RenderPartial("UserActivityComment", item);
}
...
Friends friend = Model.Friends.Where(e => e.ID == activity.ActionID).FirstOrDefault();
if (friend.FriendsProfile.UserName != Page.User.Identity.Name)
{
    Html.RenderPartial("UserActivityFriend.ascx", friend);
}

ProfileComment和Friends对象(以及其他对象)是我生成并传递给页面的ViewModel的一部分。现在,虚拟机是通过实体框架在不到0.3秒的时间内生成的。所以我认为虚拟机一切正常。

当我希望视图处理它时,出现了巨大的延迟。 'for循环'中的模型被标记,Performace Wizard也是FirstOrDefault。

奇怪的是,该模型构建得很快,但没有快速处理。的解决方案:

_entities.Friends.MergeOption = MergeOption.NoTracking;
_entities.ProfileComment.MergeOption = MergeOption.NoTracking;

我认为问题是从VM中提取对象以发送到partial,因为它还希望维护关系的实体管理。

Aia Research

的更多信息

和blogs.microsoft.co.il/blogs/gilf/archive/2009/02/20/disabling-change-tracking-in-entity-framework.aspx

请随时详细了解此内容。顺便说一下,性能提升巨大