我的问题的一些背景:
我发现很难找到这个问题的确切答案,如果答案存在的话,确切答案就是我唯一要寻找的东西。我在 Windows 10 上。我是一名开发人员和高级用户,我打开了多个 IDE、多个 VM、分布在多个 chrome 实例和多个监视器上的大约 200 多个 chrome 选项卡等,并且正在运行多个程序。我不希望我的工作流程受到批评,因为这是我使自己最大限度提高效率的方式。如果还有其他方法,我相信我们可以把它留到其他时间进行哲学讨论。
有了这样的免责声明,我想提出我的问题,这个问题看似简单,但我找不到答案:如何找出 RAM 何时成为打开的进程之间即时“alt-tab”访问的瓶颈?
例如,从我对 Windows 虚拟内存的研究中,我了解到 Windows 会缓存经常使用的程序等。我不关心这个功能,因为我需要使用的每个程序,我都希望立即访问它(没有延迟),因此它已经打开了。
然而,我注意到,当在已打开的程序实例之间按 Alt-Tab 切换时,尤其是我很长时间没有关注的打开的程序时,重新访问该程序会有 2-5 秒的延迟。这对于我喜欢的操作方式来说是不可接受的。
我想具体说明一下:安装额外的物理 RAM 对我来说不是问题。这就是我想要做的来克服这个问题,而不是做出任何其他妥协,例如运行更少的程序。
我唯一的问题是,如何通过任务管理器或其他方式定量地确定当 RAM 成为瓶颈时除了观察某些程序之间 alt-tab 切换时的 2-5 秒延迟之外,我目前的使用需求是什么?我可以使用任务管理器、资源监视器或其他地方的哪些指标来查看 Windows 何时“达到极限并需要开始缓存、压缩、分页”或执行任何其他操作以损害对已打开进程的“即时 alt-tab 快照访问”?
在任务管理器里查看内存,如下:
显然,“可用”并不是回答我的问题的正确指标,因为在长时间不活动的应用程序之间进行 alt-tab 切换时仍然会有轻微的延迟(但尽管如此,它们仍然开放,并且从那时起就没有关闭过)。
我可以使用什么指标?是因为(压缩)大于 0 吗?任何压缩是否意味着我的 RAM 现在是即时 alt-tab 的瓶颈?或者如果不是,是否仍会进行压缩?还是缓存是指标?还是已提交?
除了“更多 RAM 总是有用的”这一论点之外,还有什么指标表明添加更多 RAM 是有用的?在决定添加更多 RAM 之前,我想通过指标亲自查看 RAM 是否在某种程度上成为瓶颈。我想知道是哪个指标,以及是否保证为当前打开的进程需求添加足够的 RAM(最终数量)可以消除 alt-tabbing 时的任何延迟,或者这是否不可避免,因为这是 Windows 10 的设计缺陷,无论有多少 RAM 都无法避免?我假设情况并非如此,但如果是,我也想知道。
谢谢。
答案1
您描述的症状听起来像是典型的低内存症状,但我同意,您显示的数字并不能真正表明这一点。请注意,您有 60-70GB 的提交,所以我绝对不会将其排除在外。
为了诊断整个问题,我会使用 process hacker 或类似程序(process explorer 可能也有这些功能,但我有一段时间没用了)来监控资源使用情况。将刷新间隔设置为较短的间隔,例如 0.5 秒,并让它在后台运行。做你的正常工作,当你需要等待 2-5 秒才能切换窗口时,将刷新间隔设置为暂停,这样你就有足够的时间检查正在使用的资源,而不会太匆忙。检查:
磁盘使用
物理内存使用量增加
CPU使用率
GPU 统计数据
您还可以右键单击切换到的进程,查看其 CPU 和磁盘使用情况的历史记录。如果您看到该进程导致磁盘使用量激增,则很可能该进程已缓存到磁盘。
您还可以尝试检查 GPU 内存,以及桌面窗口管理器使用的内存量(标准)。我遇到过 dwm 使用 3-4GB 的情况,系统完全有可能决定将其缓存掉。
也许还值得检查一下正在使用你的物理内存的内容,以确保它是你所期望的。
如果您没有发现任何内容,则您的问题可能源于桌面窗口管理器和/或资源管理器的限制。我有类似的工作流程,并且我注意到问题通常不是实际内存(我也有 32GB,但除非我在专门的程序中运行复杂的计算,否则我通常不需要全部内存),而是窗口本身。我遇到过需要将近半分钟才能打开任务视图的情况(或者当您使用 Windows+Tab 时获得的任何内容 - 我现在使用自动热键脚本在桌面之间移动窗口)。有时我也会在窗口中看到黑框或其他窗口渲染伪影。这与 Windows 中的硬编码句柄限制有关,而 Microsoft 似乎对修复此问题没有任何兴趣。您可以稍微增加每个进程的句柄限制,但不幸的是,您不能增加总限制。 Windows 10 还增加了一些 Windows 7 中没有的奇怪之处,我也说不上来是什么问题——这些问题我在 Windows 7 中没有遇到,但在 Windows 10 中却出现了。不幸的是,Windows 已经不再是以前的 Windows 了。Linux 在这方面显然要灵活得多,尽管我还没有机会亲自尝试 Linux。
当我开始遇到问题时,我会关闭资源管理器,重新启动桌面窗口管理器(在提升的命令提示符下:)taskkill /f /im dwm.exe
,然后再次启动资源管理器。我已将资源管理器设置为在单独的进程中打开文件管理器窗口,因此我不会丢失资源管理器中打开的窗口,但如果您没有在文件选项中选中该选项,您将丢失所有打开的窗口。您还将丢失最小化窗口的窗口预览,但本质上,您正在清除它(以及任何可能的内存泄漏)以提高性能。您还可以恢复窗口以恢复预览(尽管您可能会回到刚刚摆脱的状况)。不幸的是,这是必要的 - 至少对我来说 - 但微软似乎并不关心。
这些是我迄今为止找到的解决方案,但完全有可能还有其他解决方案。