Windows文件缓存,如下所述:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa364218(v=vs.85).aspx
默认情况下,Windows会缓存从磁盘读取的文件数据 写入磁盘。这意味着读操作读取文件数据 从系统内存中的一个区域称为系统文件缓存 而不是从物理磁盘。
我有一个C#应用程序,它以非常频繁,快速的方式从磁盘读取文件。我是否应该担心编写自己的"文件缓存"机制,还是Windows会为我处理这个?使用Process Explorer观察我的应用程序时,即使我一遍又一遍地读取相同的静态文件,我仍然会注意到操作期间有很多磁盘I / O.可能是Windows缓存管理器只是告诉操作系统磁盘IO正在发生,实际上是从内存中的缓存中读取文件吗?
答案 0 :(得分:1)
默认情况下,对于我所知道的所有操作系统中的文件系统操作都启用了缓存,包括Windows。如果File.ReadAllText
的实现禁用它,我会感到很惊讶,因为它会带来非常巨大的性能优势。
文件系统缓存速度很快,但自定义缓存可以专门构建,因此速度更快。
例如,ReadAllText
需要将文件解码为string
- 文件系统缓存不会帮助您。您还可以保留相同的实例,以便访问它的应用程序的所有部分都引用相同的副本。这为CPU的缓存提供了跳过主内存的更好机会。减少分配也意味着降低GC压力。
您是否需要自己的第二层缓存?也许,也许不是 - 您应该首先编写最简单的代码,然后在测量后成为瓶颈时进行优化。