Каков размер буфера CreateFile по умолчанию в Windows?
-
22-08-2019 - |
Вопрос
Когда функция CreateFile вызывается без флага file_flag_no_buffering, какой размер внутреннего буфера операционной системы?
Если размер моего буфера больше внутреннего буфера Windows, могу ли я полностью использовать пропускную способность диска?
Решение
Вероятно, это зависит от версии Windows, а также от объема свободной оперативной памяти.Вместо того, чтобы полагаться на что-то конкретное, вам следует просто выполнять чтение и запись с размерами буфера, подходящими для вашего приложения.
Другие советы
Это зависит от того, сколько у вас оперативной памяти и как настроена машина.Серверы обычно настроены на привилегии системного кэша.Вы можете изменить это, изменив следующий ключ реестра
[HKEY_LOCAL_MACHINE \System \CurrentControlSet \Control \Session Manager \Memory Management] LargeSystemCache
А Функция SetSystemFileCacheSize может использоваться для изменения размера кэша.Однако, насколько я понимаю, установка размера рабочего набора — это скорее намек на операционную систему, чем жесткое ограничение.
Что касается вашего второго вопроса, я не совсем понимаю, что вы имеете в виду.Я не понимаю, как размер вашего буфера повлияет на пропускную способность, но уверен, что кто-нибудь меня поправит, если я ошибаюсь.
Если вы используете отсутствие буферизации, для ввода-вывода действительно не существует буфера, кроме того, который вы предоставили для чтения/записи.(За исключением сжатых файлов, которые представляют собой другой шарик воска.)
Системный кеш в этом случае игнорируется, поэтому от вас требуется (см. MSDN), чтобы быть осторожным с выравниванием и размером вашего ввода-вывода.