实体框架异步:一个重大的性能瓶颈
本文详细介绍了使用实体框架的异步方法时遇到的性能问题。 作者发现,与同步查询相比,异步查询的执行时间增加了十倍。
问题:同步查询在几秒钟内完成,而异步查询则花费了十倍的时间。
调试问题: SQL Server Profiler 确认同步和异步调用的 SQL 查询相同。 进一步调查发现了罪魁祸首:异步操作产生了超过 200 万个任务,并产生了巨大的开销。
根本原因: 该问题源于 Entity Framework 6 异步实现中的错误。 当处理包含大型二进制列的表时,框架应在异步调用中自动使用 CommandBehavior.SequentialAccess
标志。 这个关键的优化缺失了。
解决方案: 作者建议绕过实体框架的内置异步方法。 使用 TaskCompletionSource
的解决方法允许手动异步执行,确保 CommandBehavior.SequentialAccess
正确应用于具有大型二进制数据的表。
主要观察结果:
CommandBehavior.Default
.以上是为什么我的实体框架异步操作比同步操作慢 10 倍?的详细内容。更多信息请关注PHP中文网其他相关文章!