Какой самый быстрый способ получить varbinary данные из SQL Server в массив байтов C#?

Название говорит само за себя.

Я имею дело с файлами / данными размером около 2 МБ.

2 ответа

Решение

Если вам нужны байты в массиве, то все методы в значительной степени будут одинаковыми, так как вы должны направить все байты из результирующего потока в массив (классы SqlClient сделают это за вас).

Не имеет значения, есть ли у вас параметр вывода varbinary для хранимой процедуры или для поля в таблице базы данных, хотя хранимая процедура будет немного быстрее, поскольку у вас нет информации схемы о наборе результатов для возврата. Однако это незначительно по сравнению с размером данных, которые вы возвращаете.

Если вы действительно хотите повысить производительность, лучше использовать DataReader с установленным SequentialAccess, а затем вызывать GetBytes в считывателе для возвращаемого поля. Вызывая это, вы извлекаете только те байты, которые вам нужны, и можете обрабатывать данные порциями.

Это важно, потому что у вас наверняка будут проблемы с выделением массива байтов размером 2 МБ. Вообще говоря, начинать выделять большие непрерывные блоки памяти (а это и есть массивы) - это плохая идея, которая снижает производительность. Там, где это возможно, обрабатывайте данные небольшими порциями.

SqlDataReader.GetBytes должен быть тем, что вы ищете.

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