我的工作量类似于以下内容:
while True:
data = get_data_from_network();
filename = sha1(data);
write_to_file(filename, data, data.size());
我偶尔会从文件中读回,但这种情况并不常见。重要的是,我收到了“很多”这些网络请求。以这种方式将一千兆字节的数据写入磁盘对我来说并不罕见。因此,在大多数情况下,我实际上只是将大量数据流式传输到磁盘。 Raymond Chen 发表了这篇文章,他建议客户不要使用该旗帜,因为正如 Raymond 所说:
如果应用程序从文件中读回,则可以从磁盘缓存中满足读取,完全避免物理 I/O但我不确定这是否适用于我,因为根据缓存的大小,很有可能当我再次读取该数据时,它已经被其他一些数据推出了。
当我调用
FILE_FLAG_NO_BUFFERING
时,我可以用
CreateFile()
绕过这个,但在我盲目地这样做之前,我想知道如何从性能的角度来调查它的影响。当然,我可以为我的申请计时,但我想更深入。对于初学者来说,操作系统缓存有多大?是按进程、按文件还是全局?大小可以配置吗?我可以通过 API 以编程方式查询其大小吗?有没有办法让我调查它是否因我的工作量而受到打击?有没有办法运行我的程序,然后确定从内存缓存而不是从物理介质提供了多少磁盘读取?
正如我在评论中所说,您可以使用
性能计数器