我有一个由嵌套的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

请随时更详细地扩展这一点。顺便说一句,性能的提高是 巨大的!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top