Фон
У меня есть приложение, которое получает периодические дампы данных (файлы 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 в этом случае?
Команда Microsoft EF предоставила отзывы. См. Мой ответ для резюме.