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

tvc*_*tvc 5 windows windows-explorer memory-leaks windows-10

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

资源管理器私有字节部分的进程资源管理器图

这些是我到目前为止所尝试过的:

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

这些是我观察到的:

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

线程栈

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

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

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

我尝试删除驱动程序(回滚到 Microsoft 基本显示驱动程序),然后重新启动计算机。问题似乎没有那么严重,但绝对不会有任何进展。资源管理器仍然占用内存,现在“内存”选项卡中不再有任何变化(最大分配的块现在是堆段);这让我想知道资源管理器是否正在尝试绘制某些东西(可能是一个图标?)并卡在这个过程中。

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

tvc*_*tvc 0

我已经能够通过关闭所有视觉效果(位于高级系统设置中)来缓解该问题。显然,某些外观功能导致资源管理器不断为视觉效果分配内存,尽管我没有指出执行此操作的特定外观功能。