Как улучшить производительность операции обновления в Entity Framework 6 - PullRequest
0 голосов
/ 15 октября 2018

Мы пытаемся обновить 20000 записей за один раз, что занимает более 30 минут.Мы думаем о том, чтобы уменьшить количество записей и внедрить пакетный процесс, который будет фиксировать 1000 записей.Может ли кто-нибудь предложить предложение по улучшению производительности?

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Вы можете использовать хранимые процедуры или использовать расширения Ef, например, см. https://entityframework -plus.net / batch-update .

0 голосов
/ 15 октября 2018

По умолчанию EF выполняет 1 запрос на одно обновление.Вы можете написать хранимую процедуру, принимающую табличный параметр, таким образом, обновляя несколько строк одним запросом, уменьшая затраты на обратную передачу.Также для массовых вставок вы можете использовать SqlBulkCopy class.

Update : в качестве альтернативы вы можете использовать сторонние библиотеки для этого.Что-то вроде https://entityframework -plus.net /? Z = ef-extended и https://entityframework -extensions.net / Я также использовал простую оболочку поверх SqlBulkCopyдля объемных вставок.

Update2 : пример от Microsoft, как использовать табличные параметры: https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/table-valued-parameters Это для ADO.Net, но аналогичный подход возможен с EF.

...