这个问题困扰了我好几年,到目前为止我还没有找到一个合适的解决办法。
我安装的每一个 XP 系统几乎都会出现这个问题。打开各种程序或系统运行现有程序一段时间后,Windows 似乎资源耗尽了,但没有告诉我。
有总是可用 RAM。例如,我刚刚遇到了这种情况,我有超过 1GB 的可用 RAM。没有病毒、间谍软件或其他垃圾 - 这是一个Windows 资源问题但问题是,哪种资源正在枯竭,如何查明原因,如何防止这种情况发生?
有时,这种情况会在运行特定程序后发生 - 例如,今天我同时启动 Photoshop CS4 和 Flash CS4 时就发生了这种情况。我还注意到重新启动 The Bat(Ritlabs 的电子邮件客户端)似乎可以暂时解决这个问题,但同样,这种情况发生在甚至没有安装 The Bat 的机器上。
那么究竟发生了什么? 症状如下:
按下 alt-tab 键不会再调出列表 - 它只是立即跳转到下一个窗口,与 Alt-Esc 的工作方式非常相似,但在这种情况下,这是由于没有足够的资源来调出 alt-tab 菜单
随机程序会随机崩溃,出现随机错误、内存不足错误、系统资源不足、无法执行系统调用等。
随机程序会开始丢失随机部分 - 例如,Firefox 顶部菜单可能会消失、拉出部分选择或完全不再拉出。IE 可能会丢失一些工具栏。某些程序可能无法重绘,或者 UI 原来的位置会变成灰色。
Windows 本身从来不会抱怨内存、虚拟内存或者其他东西用完了,但它却用完了某物。
我今天能找到并应用修复的唯一线索是这个桌面堆限制。由于时间还不够,我还没有确认修复是否有效。与此同时,大家有什么想法?
答案1
可能是您正在运行的程序中存在句柄泄漏。我的一个程序中有一个 bug,它表现出这些问题,启动新程序时会出现工具栏缺失或不完整、文件->打开对话框不显示、alt-tab 无法正常工作以及奇怪的错误等问题。
在任务管理器中,您可以使用“查看”->“列”菜单来显示句柄以及用户和 gdi 对象的列,它们都使用句柄,如果您在那里发现一个具有较高数字的程序,那么它可能是罪魁祸首。
不幸的是,“高数字”到底是多少完全取决于程序。
特别要注意句柄数稳步增加的任何程序,因为这可能表明存在这种泄漏。
答案2
这是因为 Windows 有所谓的“桌面堆”,其中存放着大多数 GUI 对象,包括菜单、图标等。而这个空间非常有限,更重要的是,其大小是固定的。
看Q126962:在桌面堆上寻找解决方案并阅读陈瑞文了解更多信息。
答案3
Windows 上的“资源”或“系统资源”一词是指操作系统内部的各种对象(例如窗口句柄)。Windows 限制分配给资源的空间,以便它们无法使用所有系统内存。这就是为什么您有足够的可用内存但资源空间不足的原因。
Mark Russinovich 和 David Solomon(Winternals 和系统内部名声大噪的 Windows 专家写了一本书,详细介绍了 Windows 的核心内容:《Windows Internals》。第四版涵盖了 Windows 2000、XP 和 Server 2003,可单独购买,也可作为 Windows Server 2003 资源工具包的一部分购买。第五版将于 2009 年 6 月发布,将涵盖 Windows Vista 和 Server 2008。这两卷书之一或两卷书可能对您有所帮助,但请注意:这不仅仅是一本周六下午的读物!
答案4
“一个非常可疑的 spoolsv.exe,有 11,456 个句柄”
这是打印作业假脱机程序...您有等待或需要吹走的打印作业吗?
打印机驱动程序损坏?