Windows 7 - 最小化程序时 DWM.exe 占用大量内存

Windows 7 - 最小化程序时 DWM.exe 占用大量内存

我目前正在使用 64 位 Windows 7,没有遇到任何类似问题。

我有一块 Radeon Sapphire HD 6850 系列显卡,配备 4 GB 的物理内存,并启用了虚拟内存。

DWM.exe 服务在启动时运行良好,平均内存使用量约为 30-45MB。(工作集内存。不是私人工作价值

但是,最小化任何窗口后,DWM.exe 的活动内存使用量会从 30-45MB 飙升至约 1GB。但是,如果窗口是资源管理器窗口,它也会飙升浏览器也增加到 1GB 左右,消耗大约 3.14GB 的物理内存,直到相关窗口取消最小化。(如果最小化多个窗口,则每个窗口的物理内存使用量将增加 1GB,超过可用 RAM 量,最终导致 DWM.exe 终止。)

如果已禁用(或手动关闭)DWM.exe,系统将正常运行,程序最小化时 explorer.exe 不会出现异常内存使用情况。

DWM.exe 程序是否已损坏?有没有办法修复此问题而无需永久禁用它?

最小化应用程序之前:

最小化之前

最小化应用程序后:

最小化之后

这些绝对不是正常数字...需要澄清的是,我没有使用任何外部资源管理器程序;我的计算机上只有 Advanced System Care 5、Catalystic Control Center (AMD)、Skype、Chrome、Smart Defrag 和 Windows 7。

我已卸载并重新安装 Catalyst(将其恢复为旧版本),但没有任何变化。DWM.exe 仍然在工作集(内存)部门。(上图)

答案1

无法在此重现。我从未见过这样的事情。不过,不要混淆工作集和私有工作集。

工作集包括进程间共享的数据,例如多个程序使用相同版本的 DLL 的 DLL 文件。因此,如果您的程序本身仅使用 15 MB 的数据,并且它依赖于系统已加载的 50 MB 的 DLL,则工作集会显示这两个数字的组合;私有工作集仅显示运行该进程实际消耗的内存。换句话说,如果您终止该进程,私有工作集内存始终会被释放,但其余的工作集内存(可能)不会,因为其他程序也在使用这些资源。

也就是说,如果您在 explorer 和 dwm 的私有工作集中看到超过 ~150MB 的数据,则很可能是 AMD 驱动程序的驱动程序错误。确保您使用的是最新版本;如果是,请尝试降级到最近的前一个版本。目前我认为最新版本是 Catalyst 12.6,最近的前一个版本是 12.4。

这听起来像是内存泄漏,或者您的屏幕尺寸非常大(6 个显示器,每个分辨率为 2560x1600,或类似的疯狂尺寸)。我有一个双显示器系统,总分辨率为 2720x1924,即 5,233,280 像素...如果一个像素的颜色数据为 32 位(4 字节),则意味着存储我的帧缓冲区的一个完整的未压缩图像需要 20,933,120 字节,或将近 21 MB。然而,dwm.exe它使用了 13 MB 的私有工作集和 35 MB 的总工作集,同时打开了大约十几个窗口并启用了所有效果,包括最小化动画。

顺便说一句,如果您有六台 2560x1600 显示器,帧缓冲区每帧将占用 589 MB,因此即使这样,您的 dwm 内存使用量也与您的屏幕尺寸不相称,因为我的 21 MB 帧缓冲区仅占用了相对较小的 13 MB 私有工作集dwm.exe——我敢肯定其中很多是用于玻璃效果的 HLSL 着色器和各种 DLL 库等。此外,当我最小化资源管理器窗口时,我的 dwm 内存使用量不会增加。

您是否安装了任何 Explorer shell 扩展或自定义?也许是 WindowBlinds?只是试了一下。带有标准 Explorer 和系统 DLL 的标准图形驱动程序不应该出现这种情况。这是在您对计算机进行某些操作后才开始发生的,还是开箱即用?

是的。这可能是驱动程序错误。

答案2

要检查内置 Windows 文件是否损坏,请打开管理命令提示符(单击开始,输入cmd并按Left Ctrl+ Left Shift+ Enter)。然后,输入sfc /scannow并按 Enter。这将扫描您的系统文件并确保它们仍然是原始版本,或者至少与从 Windows 更新下载的修补版本相匹配

相关内容