Entity Framework и Parallelism - программирование
Подтвердить что ты не робот

Entity Framework и Parallelism

Фон

У меня есть приложение, которое получает периодические дампы данных (файлы XML) и импортирует их в существующую базу данных с использованием Entity Framework 5 (Code First). Импорт происходит через EF5, а не BULK INSERT или BCP, потому что необходимо применять бизнес-правила, которые уже существуют в объектах.

Обработка, по-видимому, связана с ЦП в самом приложении (очень быстро, подсистема ввода-вывода с включенным доступом к записи-кэша показывает почти нулевое время ожидания диска на протяжении всего процесса, а SQL Server показывает не более 8% -10% процессорного времени).

Чтобы повысить эффективность, я построил конвейер

System.Data.Entity.Internal.InternalContext.SaveChanges()

Второе место, примерно на 40%, столько же, сколько SaveChanges(),

System.Data.Entity.DbSet`1.Add(!0)

Вопросы

Как я могу понять, что такое Handle 2 (например, часть TPL, часть EF)? Запускает ли EF дроссель для разделения экземпляров DbContext из отдельных потоков? Кажется, есть общий ресурс, за который они борются. Есть ли что-нибудь, что я могу сделать, чтобы улучшить parallelism в этом случае?

UPDATE

Для рассматриваемого прогона максимальная степень parallelism для задачи, вызывающая SaveChanges, равна 12 (я пробовал различные значения, включая Unbounded в предыдущих прогонах).

ОБНОВЛЕНИЕ 2

Команда Microsoft EF предоставила отзывы. См. Мой ответ для резюме.

4b9b3361

Ответ 1

Ниже представлено мое взаимодействие с командой Entity Framework по этой проблеме. Я обновлю ответ, если появится больше информации

  • Проблема может быть воспроизведена в Microsoft.
  • Конфликт дескрипторов связан с сетевым вводом-выводом (даже с SQL Server на локальном хосте). Конкретно, есть конкуренция для буфера чтения для сетевого ввода-вывода в System.Data.dll.
  • Команда EF теперь работает с командой SQL Connectivity, чтобы лучше понять проблему.
  • До сих пор нет руководства от Microsoft о том, как минимизировать влияние этого утверждения.

UPDATE

Эта проблема теперь отслеживается в CodePlex:

http://entityframework.codeplex.com/workitem/636?PendingVoteId=636