gpt4 book ai didi

performance - DbContext ChangeTracking是否会降低性能?

转载 作者:行者123 更新时间:2023-12-03 08:59:02 24 4
gpt4 key购买 nike

我正在将应用程序从EF1升级到EF4.1
我使用“ADO.NET DbContext Generator”模板创建了一个DbContext和一组POCO。

当我查询生成的DbContext时,查询的数据库部分需要4毫秒的时间来执行(通过EF Profiler验证)。然后,它需要大约40秒的时间(换句话说就是:FORTY!)来完成将结果返回给应用程序的所有操作。

EF1在不到2秒的时间内处理了相同的查询。

关闭AutoDetectChanges,LazyLoading和ProxyGeneration可以使我赢得2-3秒。

当我使用AsNoTracking()扩展方法时,我可以将总执行时间减少到大约3秒。

这表明ChangeTracking是罪魁祸首。

但是我需要ChangeTracking。我必须能够最终保留所有更改,而不必手动选择修改了哪些实体。

有什么想法可以解决该性能问题吗?

最佳答案

documentation末尾的技术有用吗?另外,我通过使用流畅的界面来声明性地声明给定事务中的哪些实体肯定不会更改或可能更改(不可变与不可变),从而避免了许多性能陷阱。例如,如果我要保存的实体是聚合根,其中的根或其实体引用“refdata”项,则此启发式方法可防止多次写入,因为不需要跟踪不可变项。易变的项目都无需检查就可以写出来(一个弱点……可能会接受也可能不会接受)。

我将其与通用存储库模式一起使用正是因为我不想跟踪每种情况的更改或实现特定策略。如果那还不够,也许可以在上下文之外滚动自己的变更跟踪并根据需要添加实体。

关于performance - DbContext ChangeTracking是否会降低性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5974448/

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