2009-05-21 3 views
1

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

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

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

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

+0

Если копирование файла занимает второе место, возможно, вам следует использовать функции CopyFile или CopyFileEx или вызвать команду копирования. – ChrisW

ответ

0

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

Id идти с опцией номером 1 и сохраните файл на сетевой ресурс в фоновом режиме

1

Я интересно, если кто имеет какие-либо советы на лучший способ ускорить сохранение в сети путей?

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

1

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

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

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

+0

Хорошие моменты, хотя я уже открыл файл для записи с эксклюзивным доступом (вызов CreateFile() с dwShareMode == 0). –

Смежные вопросы