缓慢嵌套的渲染响应时间
-
02-10-2019 - |
题
我有一个由嵌套的html.renderpartials构建的ASP.NET视图/页面(动态)。该视图被发送适当的视图模型以进行渲染。
Firebug说,HTML的GET响应是9.89秒的9.5KB。比较同一站点的FAQ页面(静态HTML)为1.3秒17k。
起初,我认为这是SQL实体后端由于ViewModel的复杂性而放慢速度,但根据我的日志,它似乎在不到1秒内构造了ViewModel。
有什么想法,为什么MVC视图花费了这么长时间才能渲染,以及我如何加快速度?我正在考虑通过Ajax进行部分加载。
(顺便说一下
编辑:
将计时器(秒表)添加到OnActionExeCuting/onactionExectured和onResultExecuting/onResultExecected中。
09/12/2010 18:39:20:控制器:配置文件操作:索引过去的时间:680.6431-动作
09/12/2010 18:39:29:控制器:配置文件操作:索引过去的时间:9202.063-结果
该框架的9秒以呈现视图。
解决方案
问题解决了
首先,感谢大家的建议。我一次又一次地遵循每个建议,直到发现问题为止。这是错误的,也许有人可以为他人澄清。
VS2010 Performance Wizard说,每个将每个对象传递给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的一部分,并将其传递到页面。现在,VM是通过实体框架以不到0.3秒的成绩生成的,因此我认为VM一切都很好。
当我希望视图对其进行处理时,巨大的延迟就出现了。 “ For Loop”中的模型被标记了,Performace向导FirstOrdOdeault也是如此。
嗯,奇怪的是,该模型是迅速构建但未迅速处理的。 解决方案:
_entities.Friends.MergeOption = MergeOption.NoTracking;
_entities.ProfileComment.MergeOption = MergeOption.NoTracking;
我认为问题是从VM中提取对象,以发送到部分,因为它也希望维护实体管理的关系。
更多信息 AIA研究
和blogs.microsoft.co.il/blogs/gilf/archive/2009/02/20/disabling-change-change-tracking-in-entity-framework.aspx
请随时更详细地扩展这一点。顺便说一句,性能的提高是 巨大的!