4

我有一个由嵌套 Html.RenderPartials 组成的 asp.net 视图/页面(动态)。视图被发送一个适当的视图模型来渲染。

Firebug 说 9.5KB 的 HTML 的 GET 响应是 9.89 秒。比较同一站点的常见问题解答页面(静态 html)是 1.3 秒为 17K。

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

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

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

编辑:

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

2010 年 9 月 12 日 18:39:20:控制器:配置文件操作:索引经过时间:680.6431 - 操作

2010 年 9 月 12 日 18:39:29:控制器:配置文件操作:索引经过时间:9202.063 - 结果

框架渲染视图需要 9 秒。

4

1 回答 1

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 中提取对象以发送到部分,因为它还希望维护关系的实体管理。

Aia Research的更多信息

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

请随时对此进行更详细的扩展。顺便说一句,性能提升是巨大的

于 2010-09-14T15:29:37.567 回答