Entity Framework 的性能问题

Performance Woes with Entity Framework

掌握的技术:

问题:
我正在做一些软件的性能工作。有一个特定的问题会导致严重的减速。对于具有大约 43 个 ADDED 实体的 EF DataContextDataContext.SaveChanges() 方法会占用大量时间。

使用 SQL Profiler 我可以看到插入的持续时间为(大约)0ms。这符合预期。

使用 ANTS Profiler 我可以看到 DataContext.SaveChanges() 花费(大约)1,500 毫秒。深究这一点,这段时间有99.9%是在SNINativeMethodWrapper.SNIReadSyncOverAsync里面度过的。

使用Google,有用的结果很少(好吧none,因此这个问题)。很长一段时间以来,我第一次发现自己在查看 Google 结果的第 2 页及之后的内容(未知领域!)。

SO 上有几个问题引用了此方法,但来自不同的上下文:

我正在寻找不需要以下任何一项的解决方案:

我应该补充一点,我已经禁用了以下 EF 设置。这总体上有积极影响(正如预期的那样),但对问题域没有影响。

问题:
谁能建议可以解决或避免此问题的代码更改?

如评论中所建议:

实际上,对于 dbcontext 中的这几个条目(怀疑不是环境 DbContext),我认为手头的问题实际上不是对数据库的 inserting/manifesting 更改,而是数据库调用自身(如创建连接、身份验证)这是造成性能损失的主要问题。我实际上可以想象连接池会大大提高性能。

对于这些感兴趣的人:随着每次"actual" Db调用(即,不是查询准备,而是实际上fetching/writing数据进入数据库),如果连接string/database 名称已给出,或使用上下文构造函数的 DbContext(Connection, bool contextOwnsConnection=true) 重载中给出的连接。这将发生在每个实际调用数据库的查询中。对于某些数据库,这种连接的建立可能需要相当多的时间,而循环遍历上下文实体并根据状态发出 DELETE/UPDATE/INSERT 调用应该花费(至少对于这几个条目)不那么多的时间.