运行了这么长时间之后,我的记忆都去哪儿了?

运行了这么长时间之后,我的记忆都去哪儿了?

我有一台装有 Windows 7 Professional 的计算机,内存为 12GB。在刚启动时,内存量足以满足我的需求。但是,运行了几周后,内存似乎消失了,并开始使用虚拟内存,导致我的性能下降。

例如,我通常会打开 3 个 Visual Studio 实例,在运行初期这完全没问题。但是,到了一定程度,即使重新启动 Visual Studio 后,即使只有一个 Visual Studio 实例也会过载到无法处理。

以下一些屏幕截图可以向您展示任务管理器中的差异:

全新重启时:

全新重启 全新重启

2 周正常运行时间:

2 周正常运行时间 2 周正常运行时间

我知道 Windows 7 会尝试随着时间的推移耗尽所有可用内存以便快速访问程序和其他服务(基本上是缓存),但这并不能解释为什么在计算机运行两周后,我必须关闭大量程序/进程才能使用没有屏幕冻结延迟的程序,而几乎没有任何运行时间,我就可以正常运行多个程序。

这里到底发生了什么事?

答案1

您正在查看 Private WOrking Set。我强烈建议将 Commit Size 添加到您的任务栏中。

RAMMap 是炸弹,但大多数时候你只需要提交大小,而不是所有其他可用的内存计数器。

提交大小 IMXP 始终与内存计(XP 上的旧“PF 使用情况”)更接近

如果我在微软工作,我会将其设为默认设置,这样可以节省很多思考的时间

答案2

你应该跑内存地图当 Windows 正常时,将其另存为 RMP 文件,并在内存使用率较高时第二次运行。现在比较两者。

阅读链接的指南来了解这些值的含义。

在此处输入图片描述

在您的 taskmgr 图片中,我可以看到高 (非) 分页内核内存使用率。因此驱动程序正在泄漏内存。使用池妖或者xperf/WPA追踪哪个驱动程序正在使用内存。

答案3

您运行的一个(或多个)程序可能内存泄漏

在计算机科学中,当计算机程序错误地管理内存分配时,就会发生内存泄漏(或在此上下文中称为泄漏)。在面向对象编程中,当对象存储在内存中但无法被正在运行的代码访问时,可能会发生内存泄漏

...

内存泄漏会减少可用内存量,从而降低计算机的性能。最终,在最坏的情况下,可能会分配过多的可用内存,导致整个或部分系统或设备停止正常工作,应用程序失败,或者系统因抖动而速度减慢到无法接受的程度。

退出程序应该会释放所有相关内存。

顺便提一下,我注意到网络浏览器(及其扩展程序和插件)通常是导致此类问题的因素。使用菜单选项ExitChrome 并重新启动将恢复所有内存使用率较低的标签。

答案4

Visual Studio 非常耗资源,最终会耗尽所有可用资源。此外,有些应用程序有关闭时不释放资源的坏习惯(几乎所有微软产品都是如此)。我不知道您的要求,但如果可能的话,我建议您每周至少重启一次。这当然会清除您的内存并释放这些资源。

相关内容