我有一个相当大的edmx从数据库生成,我最近一直致力于性能改进我的应用程序我已经在各种地方阅读了一些文章,其中一些没有
这一项禁用自动检测更改http://msdn.microsoft.com/en-us/data/jj556205.aspx
这个关于提高删除DbContext is very slow when adding and deleting
的效果的问题这个(我认为非常好)http://www.codeproject.com/Articles/38922/Performance-and-the-Entity-Framework
我已经在使用myentities.tablename.MergeOption = MergeOption.NoTracking,我正在使用编译查询,我使用EdmGen预生成我的视图,我已经减少了我提取的数据等等。当然,我已经获得了性能一个跨越界限,以便在54秒内加载的页面现在需要16.1秒 - 但是我必须达到3秒所以我仍然在寻找下一个改进
所以研究一切都很好,因此我已升级到最新的EntityFramework,我已经从db等重新生成了我的.edmx ...并尝试了各种各样的东西,但我根本找不到myEntities.Configuration .AutoDetectChangesEnabled以将其设置为false。现在我必须错过一个简单的简单技巧 - 如何让我的edmx有这个选项。
我在这个环境中.Net 4.0.3,visual studio 2010,最新版本的EntityFramework,MVC 4.0 ......我需要的是有人说“啊哈”你需要去做这个...... / p>
目前,如果我从一个较大的表(1.34亿行)中删除1000条记录,则需要将近10分钟来保存更改。所以我从我所读的内容中看到AutoDetectChangesEnabled是我需要改变但它在我的类中不存在的东西?我该怎么做才能得到它?
任何帮助表示我试图快速解决这个问题
关心朱利安
答案 0 :(得分:1)
是的,我最终在stackoverflow Get DbContext for Entities上找到了这个项目,它描述了将数据库第一个edmx更改为具有.Configuration.AutoDetectChangesEnabled的版本所需的内容,这很棒,而且我能够进步。然而,这并没有让我得到我正在寻找的解决方案,因为删除被保存仍然花费了过多的时间。
所以道德是,是的,应用所有的表现技巧 预先生成您的观点, 使用AutoDetectChangesenabled = true, 使用编译查询, 智能连接字符串 创建假对象而不是先获取数据, 等等... 你可以在大多数情况下获得可接受的性能,但如果你真的需要快速做事,你需要去TSQL并手工完成
关心朱利安
答案 1 :(得分:0)
AutoDetectChanges位于DbContext.Configuration.AutoDetectChangesEnabled中。对于删除,您还可以尝试获取要删除的ID列表,创建仅设置了这些ID的伪对象,附加这些对象,然后删除它们。
但是我们最近也有类似的问题,我们目前正在使用ADO.NET删除。 (或者在DbContext上有一个可以推送SQL的方法)。一般情况下,EF适用于我们的应用,但在2-3个地方我们需要性能,因为记录数量巨大。不幸的是,我们不得不在这些地方使用ADO.NET,当您使用海量数据时,它的速度会快很多。