Прежде чем я столкнулся с проблемой реализации SqlBulkCopy и теста производительности, мне было интересно, есть ли у кого-нибудь указания относительно того, когда он должен использоваться, и если это предпочтительнее использовать даже на относительно небольших наборах данных (около 1000 строк). Есть ли накладные расходы на его использование в этой ситуации или я должен всегда использовать его при вставке разумного количества строк?
Я, вероятно, буду использовать его для 1000 строк, но вы можете сделать что-то подобное с командной загрузкой.
Обратите внимание, что с 1000 строк самый простой подход - это, вероятно, выбросить данные, которые вы хотите, в DataTable
правильной формы, что довольно тривиально. Для более крупных наборов, написав на заказ IDataReader
(для потоковой передачи записей, а не для их буферизации в первую очередь) является моим предпочтительным вариантом.
Другая вещь, которую нужно посмотреть - это транзакции, долговечность и т. Д .; при использовании SqlBulkCopy
я SqlBulkCopy
использовать это, чтобы SqlBulkCopy
в промежуточную таблицу, а затем вызвать sproc (или просто простую команду TSQL), чтобы переместить данные в реальную таблицу. Это позволяет сохранить реальную таблицу чистой, за исключением единого набора (и полностью зарегистрированного) INSERT
.
Но если вы просто хотите измерить производительность, то бросать ее в реальную таблицу нужно, чтобы получить оценку шара.
SqlBulkCopy не записывает в журналы транзакций, делая это быстрее, чем вставлять каждую строку вручную.
Даже для 1000 строк должно быть увеличение скорости, особенно если это операция с высоким доступом, например, из веб-приложения.