首页 > 后端开发 > C++ > 为什么我的实体框架异步操作比同步操作慢 10 倍?

为什么我的实体框架异步操作比同步操作慢 10 倍?

Mary-Kate Olsen
发布: 2025-01-10 18:46:42
原创
571 人浏览过

Why is My Entity Framework Async Operation 10x Slower Than Its Synchronous Counterpart?

实体框架异步:一个重大的性能瓶颈

本文详细介绍了使用实体框架的异步方法时遇到的性能问题。 作者发现,与同步查询相比,异步查询的执行时间增加了十倍。

问题:同步查询在几秒钟内完成,而异步查询则花费了十倍的时间。

调试问题: SQL Server Profiler 确认同步和异步调用的 SQL 查询相同。 进一步调查发现了罪魁祸首:异步操作产生了超过 200 万个任务,并产生了巨大的开销。

根本原因: 该问题源于 Entity Framework 6 异步实现中的错误。 当处理包含大型二进制列的表时,框架应在异步调用中自动使用 CommandBehavior.SequentialAccess 标志。 这个关键的优化缺失了。

解决方案: 作者建议绕过实体框架的内置异步方法。 使用 TaskCompletionSource 的解决方法允许手动异步执行,确保 CommandBehavior.SequentialAccess 正确应用于具有大型二进制数据的表。

主要观察结果:

  • Ado.Net 在包含大型二进制列和 CommandBehavior.Default.
  • 的表上进行异步操作时表现出类似的性能下降
  • 对于大型二进制列(作者的测试中为 256 KB),性能差异最为明显。
  • CPU 使用模式不寻常:同步操作使用 12% CPU,而异步操作峰值为 20%,暗示潜在的资源争用。

以上是为什么我的实体框架异步操作比同步操作慢 10 倍?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板