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 запросов в минуту)?
Может я где напортачил?
Re: CLR SP - сохранение и загрузка файла
От: godmother Украина  
Дата: 19.09.06 06:28
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Вот 2 реализации:


[skipped]

Ну, во-первых, варианты явно неравноценные — во втором нет ни проверки существования пути, ни прав доступа — я надеюсь, они все-таки были просто пропущены для краткости
Во-вторых — первый вариант совместим с 1.1, второй — уже только под 2 фреймворк.
Ну — и то, что вы уже упомянули сами — память. Тут уж — для кого что критично... Кстати — пробовали тестировать в рабочем режиме пару часов подряд?
Re[2]: CLR SP - сохранение и загрузка файла
От: _d_m_  
Дата: 19.09.06 11:50
Оценка:
Здравствуйте, godmother, Вы писали:

G>Во-вторых — первый вариант совместим с 1.1, второй — уже только под 2 фреймворк.


Дык, SQL Server никогда и не работал с 1.1
Re[3]: CLR SP - сохранение и загрузка файла
От: godmother Украина  
Дата: 19.09.06 12:26
Оценка:
Здравствуйте, _d_m_, Вы писали:

___>Дык, SQL Server никогда и не работал с 1.1

Канеш, не работал. Это было из серии "найди 10 отличий"
Re[4]: CLR SP - сохранение и загрузка файла
От: Sinix  
Дата: 22.09.06 05:08
Оценка:
Моя посыпает голову пеплом)
Разница в скорости — из-за размера буфера.
Оптимизировал, блин)
Поставил равным размеру экстента (64 КБ) — Всё пашет.

Тема закрыта.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.