Вот 2 реализации:
[SqlProcedure]
public static void DownloadFile(string path, SqlBytes binaryData)
{
int bytesReaded = 4096;
byte[] buffer = new byte[bytesReaded];
string directory = Path.GetDirectoryName(path);
if (!Directory.Exists(directory))
{ Directory.CreateDirectory(directory); }
long offset = 0;
int maxBytes = (int)binaryData.Length;
using (FileStream fileStream = new FileStream(path,
FileMode.CreateNew,
FileAccess.Write,
FileShare.Read,
buffer.Length,
FileOptions.WriteThrough))
{
do
{
bytesReaded = (int)binaryData.Read(offset, buffer, 0, bytesReaded);
offset += bytesReaded;
fileStream.Write(buffer, 0, bytesReaded);
fileStream.Flush();
} while (bytesReaded == buffer.Length);
}
}
[SqlProcedure]
public static void DownloadFile(string path, SqlBytes binaryData)
{
File.WriteAllBytes(path, binaryData.Value);
}
МСДН советует двигаться по варианту 1, однако при непосредственном тестировании второй вариант получается в 3,5 раза быстрее (правда за счёт менее эффективного использования памяти).
Стоит ли использовать 2-й вариант (размер файлов не будет превышать 5 метров, частота обращения — 15-40 запросов в минуту)?
Может я где напортачил?