Des*_*ume 7 memory windows performance resources cache
我使用的是带有 4 核 Intel i7 和 8 GB RAM 的 Windows 7 x64,但最近感觉我的计算机的“RAM”仅位于硬盘驱动器上。
这是任务管理器显示的内容:
列表中的进程使用的内存总量只有大约 1 GB。几天来,我的计算机上发生的事情是,一个程序 (Cataloger.exe) 不断处理大量文件(每个文件接近 5-10 MB),为了编目而反复打开和读取它们。但它在内存中不会增长太多,并且保持在 100 MB 左右的大小。但是,它在 30 分钟内处理的数据量可以用千兆字节来衡量。
所以我的猜测是 Windows 文件缓存与它有关。在对该主题进行了一些研究之后,我发现了一个名为 RamMap 的程序,它可以显示计算机 RAM 的详细信息。这是屏幕截图:
所以在我看来,Windows 将大量不再需要的数据保存在 RAM 中,将任何 RAM 分配请求重定向到硬盘驱动器上的页面文件。即使我关闭 Cataloger.exe,RamMap 也会报告映射文件的大小在很长一段时间内大致相同。这不仅仅是这个特殊的程序。早些时候,我注意到在与其他程序进行一些大量文件操作后发生了类似的减速。因此,这确实不是 Cataloger.exe 的异常行为,而且该问题过去曾多次出现。
不管是什么,它都会使计算机速度降低 50 倍。在 Chrome 中打开一个新标签需要 20-30 秒,打开一个新程序最多需要一分钟。由于速度变慢,一些程序甚至崩溃。
那么你怎么看,问题是隐藏在文件缓存中还是其他地方?我该如何解决?
Dar*_*oid 11
这一切照旧,一切正常。Windows 不会将缓存文件保存在内存中而不是其他数据 - 缓存文件意味着在某一时刻,Windows必须将它们加载到内存中或从磁盘中读取它们,并且从那时起没有出现更高优先级的东西。只要您恢复使用计算机并且程序请求内存,Windows 就会很乐意删除缓存的文件以腾出空间。
如果您查看 RAMMap,您会注意到大多数缓存文件都在“备用”下分配 - 这意味着它被保存在内存中,因为 Windows 过去需要它,可能再次需要它,并且会很乐意丢弃它如果其他东西确实需要空间。
基本上你在这里看到的是你的程序请求加载一个大数据文件,所以 Windows 将它加载到内存中。管理内存是一个非常复杂的过程,Windows 在幕后所做的就是做出判断:它查看当前进程,并看到 Chrome 正在占用 5GB 内存(很多选项卡!),但是在过去的一个小时里,大部分记忆都没有被触及。此时,它有一个选择:它可以将 Chrome 留在内存中,而不是缓存文件。这意味着编目程序可能需要数小时而不是几分钟来处理文件,尤其是在文件中频繁跳动的情况下;或者,它可以翻出 chrome 选项卡并将 Cataloger 文件加载到内存中,然后快速完成该过程。
现在,当 Windows 必须将 chrome 分页回内存时,您会感到痛苦,但在您请求之前,Windows 不会这样做(即,将 chrome 带回前台并选择一个被分页的选项卡),以及什么最终需要由您评估的痛苦是大于还是小于您的编目任务必须等待其内存的痛苦。您可以尝试将程序作为服务运行并告诉 Windows 优化响应能力,或尝试降低进程优先级,但我很确定您想要的是编目进程尽快完成 - 而它使您的磁盘 I/O 达到最大,您的整个系统将变得非常缓慢。需要磁盘 I/O 的所有内容都将放入队列中(即使是网页浏览 - 它也有使用的缓存!)。程序会打开很慢,
如果程序只是依次读取一个文件一个文件然后不再接触它们,我会同意 Windows 不需要缓存文件。这里的问题是 Windows 不知道这一点,因为没有人告诉它它们不需要缓存。
如果您有权访问 Cataloger 程序的源代码(或可以请求对其进行修改),则可以将其配置为使用 来打开文件FILE_FLAG_NO_BUFFERING
,这将导致 Windows 跳过程序以这种方式打开的文件的磁盘缓存.
如果这不是一个选项,则除非编目过程中有你的系统上运行,我环顾四周,看看是否有未使用的备用计算机,并查看它是否可以设置为专用机用于对这些文件进行编目。如果还没有,简单地增加 RAM 可能是另一种选择;如今内存价格相当便宜,开发人员知道这一点——大多数东西都是以内存为代价来优化速度和响应能力的。8GB 已经不是以前的了。
另一种选择是将它使用的所有文件移动到单独的硬盘驱动器上,并专门关闭该驱动器的磁盘缓存。
归档时间: |
|
查看次数: |
8903 次 |
最近记录: |