Самый быстрый способ записи большого количества небольших BLOB-значений в базу данных SQL Server на C#
Что я хочу сделать:
Записать много небольших (в среднем 500–1000 байт) объектов, похожих на блоб, которые я получаю из очереди в базу данных SQL Server, в таблицу с bigint
первичный ключ, а данные как varbinary
колонка.
В настоящее время я делаю это так:
- получить некоторый объект из параллельной очереди
- создать новый поток памяти и новый двоичный писатель
- сериализовать объект в поток памяти командой Write... от автора
- вызов
stream.ToArray()
и установите результат в качестве значения параметра команды SQL - выполнить команду
Это создает много маленьких байтовых массивов, которые станут мусором сразу после записи. Я хотел бы избежать этого, и создать только один байтовый массив, всегда писать и читать из этого массива.
Но похоже, что SqlCommand
объекты внутренне копируют буфер, если вы передаете байтовый массив.
Кроме того, проблема повторного использования одного и того же байтового массива состоит в том, что я не могу сказать SqlCommand
сколько байтов должно быть записано в таблицу (каждый объект будет иметь немного другую длину)
Любая идея, как сделать это без написания собственной реализации SQL?