当调用CreateFile函数时没有标志FILE_FLAG_NO_BUFFERING, 操作系统的内部缓冲区大小是多少?Windows中CreateFile的默认缓冲区大小是多少?
如果我的缓冲区大小大于Windows的内部缓冲区,我能否将 完全用完磁盘的吞吐量?
当调用CreateFile函数时没有标志FILE_FLAG_NO_BUFFERING, 操作系统的内部缓冲区大小是多少?Windows中CreateFile的默认缓冲区大小是多少?
如果我的缓冲区大小大于Windows的内部缓冲区,我能否将 完全用完磁盘的吞吐量?
它可能会有所不同,从Windows版本到Windows版本,以及取决于可用RAM的数量。您不应该依赖任何特定的东西,而应该简单地使用适合您的应用程序的缓冲区大小进行读取和写入。
这取决于您拥有多少内存,以及机器的配置方式。服务器通常配置为特权系统缓存。你可能可以用来改变缓存大小发生变化,通过改变以下注册表项
[HKEY_LOCAL_MACHINE \System \CurrentControlSet \Control \Session Manager \Memory Management] LargeSystemCache
的SetSystemFileCacheSize function。但是,据我所知,设置工作集的大小对于操作系统来说更像是一个暗示,而非硬性限制。
在问候你的第二个问题,我不太明白你的意思。我看不出缓冲区的大小是如何影响吞吐量的,但我肯定有人会纠正我,如果我错了。
如果你正在使用无缓冲,那么除了你给的读/写之外,实际上没有I/O的缓冲区。 (这是压缩文件,这是一个不同的蜡球除外)。
在这种情况下系统缓存被忽略,这就是为什么您需要(请参阅MSDN)小心对齐和您的大小I/O。
当然,如果您在windows中查看驱动器上的属性并检查选项卡“策略”,则可以看到Windows可以指示控制器缓冲您写入的内容以加速写入操作,即使您指定了无缓冲..... – ROAR 2010-11-16 14:15:08