当调用 CreateFile 函数时没有标志 FILE_FLAG_NO_BUFFERING,操作系统内部缓冲区的大小是多少?
如果我的缓冲区大小大于 Windows 的内部缓冲区,我可以完全使用磁盘的吞吐量吗?
当调用 CreateFile 函数时没有标志 FILE_FLAG_NO_BUFFERING,操作系统内部缓冲区的大小是多少?
如果我的缓冲区大小大于 Windows 的内部缓冲区,我可以完全使用磁盘的吞吐量吗?
它可能因 Windows 版本而异,并且取决于可用 RAM 的数量。而不是依赖于任何特定的东西,您应该简单地使用适合您的应用程序的缓冲区大小进行读取和写入。
这取决于您有多少 RAM,以及机器的配置方式。服务器通常配置为特权系统缓存。您可以通过更改以下注册表项来更改它
[HKEY_LOCAL_MACHINE \System \CurrentControlSet \Control \Session Manager \Memory Management] LargeSystemCache
SetSystemFileCacheSize 函数可用于更改缓存大小。但是,据我了解,设置工作集大小更多的是对操作系统的提示,而不是硬限制。
关于你的第二个问题,我不确定你的意思。我看不出缓冲区的大小将如何影响吞吐量,但我相信如果我错了,有人会纠正我。
如果您使用无缓冲,那么除了您提供给读/写的缓冲区之外,实际上没有用于 I/O 的缓冲区。(压缩文件除外,这是一个不同的蜡球。)
在这种情况下,系统缓存会被忽略,这就是为什么需要(请参阅MSDN)注意对齐和 I/O 大小的原因。