CLR SP - сохранение и загрузка файла
От: Аноним  
Дата: 19.09.06 03:51
Оценка:
Вот 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 запросов в минуту)?
Может я где напортачил?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.