Каков размер буфера CreateFile по умолчанию в Windows?

StackOverflow https://stackoverflow.com/questions/875984

  •  22-08-2019
  •  | 
  •  

Вопрос

Когда функция CreateFile вызывается без флага file_flag_no_buffering, какой размер внутреннего буфера операционной системы?

Если размер моего буфера больше внутреннего буфера Windows, могу ли я полностью использовать пропускную способность диска?

Это было полезно?

Решение

Вероятно, это зависит от версии Windows, а также от объема свободной оперативной памяти.Вместо того, чтобы полагаться на что-то конкретное, вам следует просто выполнять чтение и запись с размерами буфера, подходящими для вашего приложения.

Другие советы

Это зависит от того, сколько у вас оперативной памяти и как настроена машина.Серверы обычно настроены на привилегии системного кэша.Вы можете изменить это, изменив следующий ключ реестра

[HKEY_LOCAL_MACHINE \System \CurrentControlSet \Control \Session Manager \Memory Management] LargeSystemCache

А Функция SetSystemFileCacheSize может использоваться для изменения размера кэша.Однако, насколько я понимаю, установка размера рабочего набора — это скорее намек на операционную систему, чем жесткое ограничение.

Что касается вашего второго вопроса, я не совсем понимаю, что вы имеете в виду.Я не понимаю, как размер вашего буфера повлияет на пропускную способность, но уверен, что кто-нибудь меня поправит, если я ошибаюсь.

Если вы используете отсутствие буферизации, для ввода-вывода действительно не существует буфера, кроме того, который вы предоставили для чтения/записи.(За исключением сжатых файлов, которые представляют собой другой шарик воска.)

Системный кеш в этом случае игнорируется, поэтому от вас требуется (см. MSDN), чтобы быть осторожным с выравниванием и размером вашего ввода-вывода.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top