实体框架MVC页面加载缓慢(Entity Framework MVC Slow Page Loads

2019-09-16 23:51发布

我已经在Windows Azure上运行的Web应用程序。 它是建立与ASP.Net 4.0,MVC 3,使用Repository模式实体框架4.1,SQL Server 2008中。

这个应用程序执行得非常好,直到最近。 我们的大多数客户都有数据的几百行,但其中一人开始达到2000+。 这已经大大放慢了页面加载时间(15 - 在一些网页上20秒)。

我们刚开始使用MiniProfiler这表明我们有重复的SQL调用一个非常健谈的APP-。

在努力,得到尽可能详细,并弄清楚如何才能把事情做得更好,我会解释一些东西,在做什么。

我们有两个保护对象(CurrentUser和CurrentCompany)基地控制器。 我们在我们的行动中使用这些不少,但它击中DB各一次。 所以,我假设我们需要存储在会话这些对象的第一次。 是否有结块围绕这些物体一笔大开销? 什么以后访问他们的关系(CurrentCompany.Offices.First(),等)?

我们得到的数据基于这些对象的每一页:选择,排序,过滤他们的关系,例如:

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

这里CurrentCompany.Employees“返回EntityCollection但如果它变成了IEnumerable。 听说IQueryable的是要走的路?

我也读了EF是伟大的事情快速启动和运行,但你必须做一些调整,以确保它有很多数据的表现良好。 从我已阅读,它会带回来,即使你只问2列整行?

因此,所有在mind-能有人指出我应该做的,使这个规模更大的客户。 2000+行不算多毕竟。 我们应该使用视图/存储的特效?

有资源在那里解释如何获得EF设置基本的选择,etc-但没有真正一个scalling一次数据集变得更大的plently。

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

Answer 1:

你有多少渴望装载在做什么? 这是一两件事,我们发现是一个重大的性能损失,来解决这个问题,我们开始使用缓存的属性Entlib缓存应用程序块 ,然后将它们合并到该对象从缓存VS从DB让他们



Answer 2:

奇怪的是线索可能是在2000年的行。 SQL改变的时候选择通过数据集的0.1%它访问数据的方式。 如果你有在桌子上适当的索引,你不说。 http://www.sqlteam.com/article/sql-server-indexes-the-basics可以帮助如果您运行SQL同治工作室则存在丢失索引功能http://msdn.microsoft.com/en-us/库/ ms345524.aspx

HTH

这里也http://blogs.msdn.com/b/sqlazure/archive/2010/08/19/10051969.aspx



Answer 3:

根据我自己的经验,EF是很慢的,因为它使用LINQ(很慢)我有一个的personnal网站(其显示多种类型数据的主页,所以我不得不做多个请求在LINQ数据库服务器)。 这是非常缓慢的,我试着用延迟加载选项等来调整EF的.edmx ......我发现的唯一的解决办法是摆脱LINQ,并在ado.net改写它,它需要更多的时间来代码,但我摆脱速度问题..... LINQ请求必须转换为SQL,有很多的步骤之前,它获取到数据库中,而当它得到的数据(SELECT *),这将其转换为一个列表对象模型EF。 谢谢



文章来源: Entity Framework MVC Slow Page Loads