Вот 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 запросов в минуту)?
Может я где напортачил?
Здравствуйте, Аноним, Вы писали:
А>Вот 2 реализации:
[skipped]
Ну, во-первых, варианты явно неравноценные — во втором нет ни проверки существования пути, ни прав доступа — я надеюсь, они все-таки были просто пропущены для краткости

Во-вторых — первый вариант совместим с 1.1, второй — уже только под 2 фреймворк.
Ну — и то, что вы уже упомянули сами — память. Тут уж — для кого что критично... Кстати — пробовали тестировать в рабочем режиме пару часов подряд?
Здравствуйте, _d_m_, Вы писали:
___>Дык, SQL Server никогда и не работал с 1.1
Канеш, не работал. Это было из серии "найди 10 отличий"