Самый быстрый способ записи большого количества небольших BLOB-значений в базу данных SQL Server на C#

Что я хочу сделать:

Записать много небольших (в среднем 500–1000 байт) объектов, похожих на блоб, которые я получаю из очереди в базу данных SQL Server, в таблицу с bigint первичный ключ, а данные как varbinary колонка.

В настоящее время я делаю это так:

  1. получить некоторый объект из параллельной очереди
  2. создать новый поток памяти и новый двоичный писатель
  3. сериализовать объект в поток памяти командой Write... от автора
  4. вызов stream.ToArray() и установите результат в качестве значения параметра команды SQL
  5. выполнить команду

Это создает много маленьких байтовых массивов, которые станут мусором сразу после записи. Я хотел бы избежать этого, и создать только один байтовый массив, всегда писать и читать из этого массива.

Но похоже, что SqlCommand объекты внутренне копируют буфер, если вы передаете байтовый массив.

Кроме того, проблема повторного использования одного и того же байтового массива состоит в том, что я не могу сказать SqlCommand сколько байтов должно быть записано в таблицу (каждый объект будет иметь немного другую длину)

Любая идея, как сделать это без написания собственной реализации SQL?

0 ответов

Другие вопросы по тегам