短期高VM内存使用率的影响(Windows)

时间:2010-03-18 16:21:12

标签: windows caching virtual-memory

在我正在编写的应用程序中,我使用了很多内存容器(C ++ std容器,但我认为这不相关)。

在我的应用程序的一个“任务”中,在繁重的使用边缘情况下,私有字节内存使用量达到1GB。

就像上下文一样,此任务是一个涉及100,000个文件的用户启动任务。用户可能会启动它,然后让机器继续运行。

(并且我不会像将文件加载到内存中那样愚蠢 - 这个足迹是与正在进行的任务相关的所有元数据。)

对于大多数用户来说,此任务期间的内存使用量是可以忽略不计的 - 只有1%的用户想要做500,000件“事物”,并且需要5000件“事物”。

我正准备开始将一些内存中的东西以某种方式移动到磁盘上,例如临时文件,嵌入式数据库。

但后来我想 - “等一下。所有这些解决方案基本上都是将内存缓存到磁盘。这不是虚拟内存的用途吗?”。

我对持久保存这些数据并不感兴趣 - 这是我在任务运行时需要访问的纯粹的临时/临时内容。

所以我的问题是,我该怎么做?

我不想为1%做一个主要的重构,但我想知道运行具有高内存占用量的应用程序的影响。

我是否正确地说我可能无法比Windows VM管理器做得更好?

在什么条件下这会变得有害?好吧,是的,如果我用尽了所有真正的内存,那么它就会重新加载页面。但是,如果例如,我不会那样做。嵌入式数据库?

干杯,

约翰

1 个答案:

答案 0 :(得分:2)

是的,内存管理器会为您完成这项工作。然而,并非没有副作用,它将从其他进程已映射的RAM中驱逐页面并将其提供给您。这些其他进程会因此而变慢,当他们访问这样一个换出的页面时,会遇到页面错误。

这里的平衡行为是你的应用程序是否“足够重要”,足以证明其他进程不会被忽视。通常在工作站上是“是”,在服务器上是响亮的“否”。