虚假记忆?

虚假记忆?

我的许多应用程序似乎无法分配内存。这包括资源管理器中缺少按钮/工具栏、其他应用程序根本无法启动等。WinSCP 实际上给出了最详细的错误消息:

读取 ListingCommandEdit->Items.Strings 时出错:系统错误。代码:8。存储空间不足,无法处理此命令。

后面的文本是系统错误的通用错误文本ERROR_NOT_ENOUGH_MEMORY。现在问题是:我有足够的内存。

弹出 Process Explorer 后,会显示 650 MB 的可用 RAM 和 200 MB 的缓存。根据 Process Explorer,页面文件还有 1.5 GB。保存页面文件的磁盘 (C:) 有 137 GB 的可用空间。

我接下来想到的是句柄:也许那里有限制?根据 PE,我有 30k 个句柄,但快速测试应用程序说我至少可以分配另外 30k。

那么...我到底缺少什么?是的,有很多正在运行,但如果我有更多的资源可用,那么我就不会看到错误。

答案1

显然,Windows 有一个称为“桌面堆”的东西,默认情况下为 3 MiB。有关诸如HWNDs(窗口、按钮、文本、编辑框、复选框、单选按钮等)的信息都存储在这里 - 如果您用尽了它,您将无法再创建任何 Windows,因此系统将停止运行。

这是一个设定的限制 - 没有什么有用的,比如扩大堆。幸运的是,它是可重新配置的,但需要重新启动。这是对 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems\Windows 的注册表调整。

如果您需要了解这是否对您有影响,请dheapmon从此处获取 Microsoft 提供的工具:

http://www.microsoft.com/downloads/details.aspx?familyid=5cfc9b74-97aa-4510-b4b9-b2dc98c8ed8b&displaylang=en

关于如何运行它的更好的文章:

关联

最后,如何调整该注册表项以使其正常工作:

关联

答案2

您做过内存测试吗?记忆测试就是这样一个实用程序。

可能是您在查找可用空间时遇到错误,但这些错误并未显示出来。应用程序可以更好地报告这些错误,但代码可能无法区分这些错误。

它会请求 X 字节,如果没有获得所需的数量,它会认为内存不足,而不是内存有问题。

相关内容