我有一个在 Windows Azure 上运行的 Web 应用程序。它是使用 ASP.Net 4.0、MVC 3、Entity Framework 4.1、SQL Server 2008 使用存储库模式构建的。
直到最近,该应用程序的表现都非常好。我们的大多数客户都有几百行数据,但其中一个开始达到 2000+。这大大减慢了他们的页面加载时间(某些页面为 15 - 20 秒)。
我们刚开始使用 MiniProfiler,这表明我们有一个非常健谈的应用程序——带有重复的 SQL 调用。
为了提供尽可能多的细节并弄清楚我们如何才能做得更好,我将解释一些正在做的事情。
我们有一个包含两个受保护对象(CurrentUser 和 CurrentCompany)的基本控制器。我们在 Actions 中使用了很多这些,但它每次都会命中数据库。所以,我假设我们需要在第一次将这些对象存储在会话中。围绕这些对象集结是否有很大的开销?以后如何访问他们的关系(CurrentCompany.Offices.First() 等)?
我们根据这些对象获取每个页面的数据:选择、排序、过滤它们的关系,例如:
CurrentCompany.Employees.Where(r => r.StatusId = Enums.Statuses.Active);
此处“CurrentCompany.Employees”返回一个 EntityCollection,但 Where 将其更改为 IEnumerable。我听说 IQueryable 是要走的路?
我还读到 EF 非常适合快速启动和运行,但您必须进行一些调整以确保它在处理大量数据时表现良好。根据我的阅读,即使您只要求 2 列,它也会带回整行?
因此,考虑到所有这些 - 有人可以指出我应该做些什么来为更大的客户制作这个规模。毕竟 2000 多行并不多。我们应该使用视图/存储过程吗?
那里有大量的资源来解释如何使用基本选择等进行 EF 设置 - 但一旦数据集变得更大,就没有真正的缩放它。
任何帮助将不胜感激。布赖恩