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