Я использую Entity-Framework 6.1.3 с базой данных sqlite. Во время загрузки страницы я инициализирую некоторые свойства в цикле (см. Ниже).Почему ссылка на DbSet.Local медленная в цикле?
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;
}
тот же цикл с тем же количеством данных занимает ~ 40мс
Так почему доступ DBSet.Local так медленно?
EDIT:
Db.Configuration.AutoDetectChangesEnable = false
также делает назначение быстро. Однако я до сих пор не понимаю, почему здесь проблема. Мои свойства, которые я назначаю, связаны только с полями, поэтому здесь не происходит никакой операции. Во время назначения не должно быть изменений в DBSet.
Что произойдет, если вы установите 'Db.Configuration.AutoDetectChangesEnable' на' false'? –
@IvanStoev это хорошо -> 40ms – Vanice
Хорошо, если это уже извлеченный список, то почему вы используете это внутри цикла 'Db.ExchangeRates.Local'? Другими словами, используя 'Db' снова? – Sampath