Pergunta

Quando CreateFile função é chamada sem a FILE_FLAG_NO_BUFFERING bandeira, qual é o tamanho do buffer interno do sistema operacional?

Se o meu tamanho do buffer é maior do que o buffer interno do Windows, posso utilizar plenamente a taxa de transferência de disco?

Foi útil?

Solução

É provável que varia de versão do Windows para a versão do Windows, bem como, dependendo da quantidade de RAM livre. Ao invés de confiar em qualquer coisa específica, você deve simplesmente fazer leituras e gravações com tampão de tamanhos que funcionam bem para a sua aplicação.

Outras dicas

Depende quanta memória RAM você tem, e como a máquina está configurada. Os servidores são geralmente configurados para cache do sistema de privilégio. Você poderia mudar isso alterando a seguinte chave do Registro

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

O SetSystemFileCacheSize função pode ser usada para alterar o tamanho do cache . No entanto, pelo que eu entendo, definindo o tamanho do conjunto de trabalho é mais uma dica para o sistema operacional do que um limite rígido.

No que diz respeito à sua segunda pergunta, eu não sei exatamente o que quer dizer. Eu não vejo como o tamanho do buffer irá afectar o rendimento, mas eu tenho certeza que alguém vai me corrija se eu estiver errado.

Se você estiver usando não-buffering, não há realmente um buffer para o I / O diferente daquele que você deu para leitura / gravação. (Isto é exceção arquivos compactados, que é uma bola diferente de cera.)

O cache do sistema é ignorado neste caso, razão pela qual você é obrigado (veja MSDN ) para ter cuidado com o alinhamento e do tamanho do seu I / o.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top