большой вопрос.
Небуферизованный ввод-вывод-это простая копия файла из исходного расположения в целевое. Буферизованный ввод-вывод увеличивает простую копию для оптимизации будущих операций чтения (и записи) того же файла путем копирования файла в кэш файловой системы, который является областью виртуальной памяти. Буферизованный ввод-вывод приводит к снижению производительности при первом обращении к файлу, так как он должен скопировать файл в память; однако, поскольку доступ к памяти быстрее, чем доступ к диску, последующий доступ к файлам должен быть быстрее. Операционная система заботится о синхронизации записи файлов обратно на диск, и читает могут быть извлечены непосредственно из памяти.
Примечание использование упоминает большие файлы визави буферизованного ввода/вывода так:
- первоначальная стоимость дорогая. снижение производительности с буферизованным вводом-выводом существенно хуже для больших файлов.
- вы получаете мало взамен. большие блоки файлов в любом случае, не старайтесь оставаться в кэше очень долго, если у вас нет тонны памяти относительно размера файла.
- это не может избежать дискового ввода / вывода чтение и запись больших блоков данных файла увеличивает вероятность требования дискового ввода-вывода
- вам, вероятно, не нужно буфер в любом случае. большие файлы, как правило, реже доступны на практике, чем меньшие файлы.
Так что есть компромисс, но подходящее для вас, зависит от вашего конкретного случая. Если вы заархивируете кучу файлов и передаете zip в резервную цель, unbuffered-это путь. Копирование только что измененных файлов? Буферизация должна быть быстрее.
наконец, обратите внимание, что размер файла не является единственным фактором при выборе между буферизованным и небуферизованным. Как и любой другой кэш, кэш файловой системы быстрее, но меньше, чем исходный код. Для этого требуется стратегия замены кэша что определяет, когда следует выселять элементы, чтобы освободить место для новых элементов. Он теряет свою выгоду, когда часто используемые элементы выселяются. Например, если вы синхронизируете домашние каталоги пользователей внутри дня в отдельное место (т. е., в то время как пользователи активно используют файлы), буферизированный ввод-вывод выиграет от файлов, уже находящихся в кэше, но может временно загрязнить кэш устаревшими файлами; с другой стороны, unbuffered откажется от любых преимуществ файлов, уже кэшированных. Нет явного победителя в таком случай.
Примечание: это также относится к xcopy /J
см. Microsoft Задать Блоге Команды дополнительные.