сохранение файла в сеть - PullRequest
1 голос
/ 21 мая 2009

У меня есть файл размером около 7 МБ, который сохраняется в моей локальной папке за считанные секунды. Однако сохранение этого файла в сетевом расположении занимает минут . Мне интересно, что я могу сделать, чтобы ускорить это. Вот мои текущие варианты:

  1. Сохраните данные во временный файл на локальном компьютере, затем скопируйте временный файл в сетевой путь . Я, вероятно, сделаю это, так как это самый простой и самый удачный вариант.
  2. Используйте SetFilePointerEx() и SetEndOfFile(). Я подумал, что это может быть полезно, основываясь на ответе на этот вопрос: Создание большого файла в Windows
  3. Буфер пишет . Я мог бы кэшировать записываемые данные самостоятельно и очищать при заполнении буфера, но разве это не было бы избыточно с кэшированием, которое уже выполняется ОС?

# 1 кажется лучшим вариантом, но мне интересно, есть ли у кого-нибудь совет по поводу лучшего способа ускорить сохранение в сетевых путях?

Редактировать: Сеть находится в гигабитной локальной сети, поэтому скорость не должна быть проблемой. Копирование файла по сетевому пути занимает около 1 секунды. Я только что заметил, что мы вызываем WriteFile () для более мелких порций данных, чем нам, вероятно, следовало бы, поэтому оптимизация кода более высокого уровня для написания более крупных порций, вероятно, поможет, но разница в скорости все еще настолько значительна, что все еще стоит задать вопрос .

Ответы [ 3 ]

1 голос
/ 21 мая 2009

Интересно, есть ли у кого-нибудь совет по поводу лучшего способа ускорения сохранения в сетевых путях?

Может быть, вам нужна лучшая сеть. Интернет-провайдеры часто обеспечивают быструю загрузку, но медленную загрузку. Сколько времени занимает передача 7 МБ с использованием протокола, такого как FTP?

1 голос
/ 22 мая 2009

Вы захотите выполнить операции чтения-изменения-записи. Обычно вы хотите записать блоки размером не менее 4 КБ, возможно, с более высокими степенями 2. Причина заключается в том, что для добавления одного байта обычно требуется прочитать последний блок файла, добавить один байт и записать новый блок , Записывая блоки по 4 КБ (только), каждая запись обычно заканчивается как новый блок в конце файла.

Кэширование должно вам здесь помочь, но кэширование не идеально. Это может помочь открыть файл исключительно. Если вы отказываете в доступе на чтение, ОС может заметить, что очистка кэша не слишком важна для других приложений.

CopyFile может быть быстрым, потому что он может делать то же самое.

0 голосов
/ 21 мая 2009

Вы работаете в медленной сети?

Идентификатор с параметром № 1 и сохранение файла в общей сетевой папке в фоновом режиме

...