1

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

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

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

(不,我不会做任何愚蠢的事情,比如将文件加载到内存中——这个足迹是与正在进行的任务相关的所有元数据)。

对于大多数用户而言,此任务期间的内存使用量可以忽略不计——只有 1% 的用户想要执行 500,000 件“事情”中的 5000 件“事情”。

我正要着手将大量内存中的内容以某种方式移动到磁盘上,例如暂存文件、嵌入式数据库。

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

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

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

我不想对那 1% 做重大的重构,但我想知道运行具有如此高内存占用的应用程序的影响。

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

在什么情况下这会变得有害?好的,是的,如果我用完所有的真实内存,那么重新加载页面会很糟糕。但是,如果是嵌入式数据库,我不会有这种情况吗?

干杯,

约翰

4

1 回答 1

2

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

这里的平衡行为是您的应用程序是否“重要”到足以证明其他流程不会受到冷落。通常在工作站上是“是”,在服务器上是响亮的“否”。

于 2010-03-18T17:24:15.183 回答