1

我有一个从数据库生成的相当大的 edmx,最近我一直在提高性能以改进我的应用程序

这个关于禁用自动检测更改http://msdn.microsoft.com/en-us/data/jj556205.aspx

这个关于提高删除性能的DbContext 在添加和删除时非常慢

这个(我认为很好)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为了将其设置为假。现在我必须错过一个简单的简单技巧 - 我如何让我的 edmx 拥有这个选项。

我在这个环境中。Net 4.0.3,Visual Studio 2010,EntityFramework 的最新版本,MVC 4.0 ......我只需要有人说“啊哈”你需要去做这个......

目前,如果我从我的一张较大的表(1.34 亿行)中删除 1000 条记录,则保存更改需要将近 10 分钟。所以从我读到的 AutoDetectChangesEnabled 是我需要改变的,但它在我的课程中不存在?我必须做什么才能得到它?

任何帮助表示赞赏我正在尝试快速解决这个问题

问候朱利安

4

2 回答 2

1

是的,我最终在 stackoverflow Get DbContext for Entities上找到了这个项目,它描述了将数据库首先 edmx 更改为具有 .Configuration.AutoDetectChangesEnabled 的版本所需的内容,这很棒,我能够取得进展。但是,这并没有让我得到我正在寻找的解决方案,因为保存删除仍然需要大量时间。

所以道德是,是的,在生成视图之前应用所有性能技巧,使用 AutoDetectChangesenabled=true,使用编译查询,智能连接字符串创建假对象而不是首先获取数据等等......在大多数情况下,你可能会得到性能是可以接受的,但如果你真的需要快速做事,你需要去 TSQL 并手动完成

问候朱利安

于 2012-10-28T10:42:56.180 回答
0

AutoDetectChanges 位于 DbContext.Configuration.AutoDetectChangesEnabled 中。对于删除,您还可以尝试获取要删除的 ID 列表,创建仅设置了这些 ID 的假对象,附加这些对象,然后删除它们。

但是,我们最近也遇到了类似的问题,我们目前正在使用 ADO.NET 进行删除。(或者在 DbContext 上有一个可以推送 SQL 的方法)。一般来说,EF 非常适合我们的应用程序,但在 2-3 处我们需要性能,因为记录数量巨大。不幸的是,我们不得不在这些地方使用 ADO.NET,当您处理海量数据时,它的速度要快很多倍。

于 2012-10-27T20:31:53.043 回答