Как уже указывал Ладислав в комментарии, вам нужно отключить автоматическое обнаружение изменений для повышения производительности:
context.Configuration.AutoDetectChangesEnabled = false;
Это обнаружение изменений включено по умолчанию в DbContext
API.
Причина, по которой DbContext
ведет себя так сильно отличается от API ObjectContext
, заключается в том, что гораздо больше функций API DbContext
будут вызывать DetectChanges
внутри, чем функции ObjectContext
API, когда включено автоматическое обнаружение изменений.1012 *
Здесь вы можете найти список тех функций, которые по умолчанию вызывают DetectChanges
.Это:
-
Add
, Attach
, Find
, Local
или Remove
членов DbSet
GetValidationErrors
, Entry
или SaveChanges
членов на DbContext
- Метод
Entries
на DbChangeTracker
Особенно Add
звонки DetectChanges
, который отвечает за бедныхпроизводительность, которую вы испытали.
Я противопоставляю этому ObjectContext
API-вызовы DetectChanges
только автоматически в SaveChanges
, но не в AddObject
и других соответствующих методах, упомянутых выше.Вот почему производительность по умолчанию для ObjectContext
выше.
Почему они внедрили это автоматическое обнаружение изменений по умолчанию в DbContext
во многих функциях?Я не уверен, но похоже, что его отключение и вызов DetectChanges
вручную в нужных точках считается продвинутым и может легко внести незначительные ошибки в ваше приложение, поэтому используйте [it] с осторожностью .