gpt4 book ai didi

entity-framework - 为什么在循环中引用DbSet.Local很慢?

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

我正在使用带有sqlite数据库的Entity-Framework 6.1.3。
在页面加载期间,我正在循环中初始化一些属性(请参见下文)。

foreach (var trade in model.Trades)
{
trade.ExchangeRates = Db.ExchangeRates.Local;
trade.BaseCurrency = Prj_TradAc.Properties.Settings.Default.BaseCurrency;
}


Db.ExchangeRates.Local从未命中预期的数据库。
因此,我期望只分配对Db.ExchangeRates.Local的引用,该引用应该很快。
但是,只有大约500笔交易,循环几乎需要10秒钟!

当我执行以下操作时

var ers = Db.ExchangeRates.Local;
foreach (var trade in model.Trades)
{
trade.ExchangeRates = ers;
trade.BaseCurrency = Prj_TradAc.Properties.Settings.Default.BaseCurrency;
}


具有相同数据量的相同循环大约需要40ms

那么,为什么访问DBSet.Local这么慢?

编辑:

Db.Configuration.AutoDetectChangesEnable = false


也使分配工作更快。但是,我仍然不明白为什么这是一个问题。我要分配给我的属性只是链接到字段-因此此处没有任何操作。分配期间不应更改DBSet。

最佳答案

每当您访问Local属性(使用属性getter)并且DbContext.Configuration.AutoDetectChangesEnabled属性为true(默认情况下)时,EF都会调用ObjectContext.DetectChanges方法,这会减慢该过程。

关于entity-framework - 为什么在循环中引用DbSet.Local很慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39407871/

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