微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

asp.net – 实体框架MVC慢页面加载

我有一个Windows Azure上运行的Web应用程序.
它使用存储库模式使用ASP.Net 4.0,MVC 3,Entity Framework 4.1,sql Server 2008构建.

该应用程序表现非常好,直到最近.我们的大多数客户都有几百行数据,但其中一行开始达到2000.这大大减慢了页面加载时间(在某些页面上为15 – 20秒).

我们刚刚开始使用MiniProfiler,这表明我们有一个非常繁琐的应用程序 – 具有重复的sql调用.

为了尽可能多地提供细节并弄清楚我们如何做得更好,我会解释一些正在做的事情.

我们有一个基本控制器,它有两个受保护的对象(CurrentUser和CurrentCompany).我们在动作中使用了这些,但每次都会击中DB.所以,我假设我们需要在第一次将这些对象存储在会话中.围绕这些物体会有很大的开销吗?稍后访问他们的关系怎么样(CurrentCompany.Offices.First()等)?

我们根据这些对象获取每个页面的数据:选择,排序,过滤它们的关系,例如:

CurrentCompany.Employees.Where(r => r.StatusId = Enums.Statuses.Active);

这里’CurrentCompany.Employees’返回一个EntityCollection,但Where将其更改为IEnumerable.我听说IQueryable是要走的路吗?

我还读到,EF很适合快速启动和运行,但你必须做一些调整以确保它能够很好地处理大量数据.根据我的阅读,即使你只要求2列,它也会带回整行?

因此,考虑到所有这些 – 有人可以指出我应该做些什么来为更大的客户做出这种规模.毕竟2000行并不多.我们应该使用views / stored procs吗?

有很多资源在那里解释如何使用基本选择等方式获得EF设置 – 但是一旦数据集变大,就没有任何东西真正被剥夺了.

任何帮助将不胜感激.
布赖恩

解决方法

你在做多少急切加载?这是我们发现的一个主要性能影响,解决它我们开始使用 Entlib Caching Application Block缓存属性 然后将它们从缓存中合并到对象中,然后从DB中获取它们

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐