gpt4 book ai didi

c# - Entity Framework 的性能问题

转载 作者:行者123 更新时间:2023-11-30 12:42:23 24 4
gpt4 key购买 nike

手头的技术:

  • C#.NET 4.0
  • SQL Server 2014
  • Entity Framework 4.3.1
  • 代码优先
  • ANTS 性能分析器 7
  • SQL Server 2014 分析器 2
  • 谷歌搜索

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

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

使用 ANTS Profiler 我可以看到 DataContext.SaveChanges() 花费了(大约)1,500 毫秒。深入研究,99.9% 的时间花费在 SNINativeMethodWrapper.SNIReadSyncOverAsync 中。

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

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

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

  • 将 EF 升级到 V6+(或与此相关的任何其他版本)
  • 远离 CodeFirst
  • 不使用 DataContext.SaveChanges()
  • 重新设计软件

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

  • Context.Configuration.ValidateOnSaveEnabled = false;
  • Context.Configuration.AutoDetectChangesEnabled = false;

问题:
任何人都可以建议可以解决或避免此问题的代码更改吗?

最佳答案

如评论中所建议的那样:

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

对于这些感兴趣的人:对于每个“实际”Db 调用(即,不是查询准备,而是实际将数据提取/写入数据库),如果给定连接字符串/数据库名称,EF 将首先建立连接,或者使用上下文构造函数的 DbContext(Connection, bool contextOwnsConnection=true) 重载中给出的连接。这将发生在每个实际调用数据库的查询中。对于某些数据库,这种连接的建立可能会花费相当多的时间,而循环遍历上下文实体并根据状态发出 DELETE/UPDATE/INSERT 调用应该花费(至少对于这几个条目)不那么多的时间.

关于c# - Entity Framework 的性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34091553/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com