什么可能导致资源管理器“泄漏”内存?

什么可能导致资源管理器“泄漏”内存?

我已经遇到这个问题有一段时间了。我使用的是 Windows 10 v1909。每当我打开资源管理器窗口时,该进程占用的内存(这里以私有字节表示 - 我知道这并不能反映进程内存使用情况的每个方面)就会慢慢消耗我系统的所有内存。在某些极端情况下,它会消耗我电脑的整整 7GB 内存,为了让任何东西再次可用,我必须将其关闭。

进程浏览器私有字节部分的图表

这些是我迄今为止尝试过的:

  • 正在运行sfc /scannow:没有任何损坏。
  • 断开所有映射的网络驱动器:没有任何变化。(这在过去对我来说是一个问题,因为我会在临时系统上映射多个共享,当这些共享被清除时,Explorer 就会挂起并冻结)
  • 停止并删除我最近安装的可疑应用程序:问题仍然存在。我安装了 Google Drive File Stream 和 Winaero Tweaker。我怀疑 GDFS 替代驱动器会导致问题,但事实证明并非如此。
  • 尝试使用 Sysinternals 的 RAMMAP 清除工作集。事实证明这很有用,因为 Explorer 内存使用似乎“清除”了,但如果窗口一直打开,它就会再次开始消耗内存。

以下是我观察到的情况:

  • 我甚至亲自验证了 explorer 二进制文件和 shcore.dll 的数字签名(下面将详细介绍),但它们仍然完好无损,这排除了可执行文件被修改的任何可能性。
  • 在 Explorer 创建的线程中(大约有 50-60 个),只有一个线程不断消耗处理时间 - 虽然不多,但时不时会导致一个小的峰值(上面的屏幕截图)。
  • 位于其堆栈顶部的函数是来自的(可能)未记录的函数shcore.dll,其序数为 172(参见下图),但我认为这种行为是正常的,因为我的笔记本电脑(v1909 也是)也会这样。

线程堆栈

还有一个问题这里似乎和我的问题一样,但仍然没有答案。我尝试对进程进行内存转储,因为我认为这可能有助于调查占用的内容,但我没有调查转储或使用 WinDbg 的经验,尽管我可以看到内存内容。如果需要,我可以提供转储并记录跟踪。Explorer 一直是核心系统文件,因此很难相信它有错误,此外,我找不到与内存使用过多相关的任何内容,如Windows 10 v1909 已知问题页。

更新 1:
这种有问题的行为在重新启动后仍然存在,并且只有在我打开资源管理器窗口时才会显得严重(内存消耗迅速上升);当没有打开资源管理器窗口时,它的内存消耗是稳定的。

更新 2:
根据 @Didier 的评论,我尝试使用 Process Hacker 而不是 Process Explorer,并做了额外的观察。我可以看到名为 的模块的内存分配igdusc64在“内存”选项卡下不断扩大。快速检查文件后发现它是一个着色器编译器库,并且与英特尔图形驱动程序相关(这是有道理的,因为我的机器有英特尔 CPU,没有独立 GPU)。

我尝试删除驱动程序(回滚到 Microsoft 基本显示驱动程序),然后重新启动机器。问题似乎没有那么严重,但肯定没有任何改善。Explorer 仍然占用内存,现在“内存”选项卡中没有任何变化(分配的最大块现在是堆段);这让我怀疑 Explorer 是否正在尝试绘制某些东西(可能是图标?)并卡在进程中。

更新 3:
我尝试关闭所有视觉效果(在高级系统设置中),问题似乎消失了。我仍然不确定 Explorer 是否不再消耗内存,或者它是否仍然消耗内存,但速度非常慢,所以我想我会再等 24 小时再得出结论。

答案1

我可以通过关闭所有视觉效果(位于高级系统设置中)来缓解此问题。显然,某些外观功能已导致 Explorer 不断为视觉效果分配内存,尽管我还没有找出造成这种情况的特定外观功能。

相关内容