由于桌面堆限制,您可能会收到错误"内存不足"

本文有助于修复在 Windows 中打开多个应用程序窗口时发生的错误"内存不足"。

原始产品版本:   Windows 7 Service Pack 1、Windows Server 2012 R2
原始 KB 编号:   947246

症状

在 Windows 中打开多个应用程序窗口后,可能无法打开任何其他窗口。 有时,可能会打开一个窗口。 但是,它不包含预期组件。 此外,您可能会收到类似于以下内容的错误消息:

内存不足

原因

由于桌面堆限制,会出现此问题。 如果关闭一些窗口,然后尝试打开其他窗口,这些窗口可能会打开。 但是,此方法不会影响桌面堆限制。

解决方案

重要

此部分(或称方法或任务)介绍了修改注册表的步骤。 但是,注册表修改不当可能会出现严重问题。 因此,请务必严格按照这些步骤操作。 为了加强保护,应先备份注册表,再进行修改。 如果出现问题,可以还原注册表。 若要详细了解如何备份和还原注册表,请参阅如何在 Windows 中备份和 还原注册表

若要解决此问题,请修改桌面堆大小。 为此,请按照下列步骤操作:

  1. 单击 "开始"菜单,在"开始搜索"框中键入 regedit,regedit.exe" 程序"列表中单击 " 开始"菜单。

    备注

    如果系统提示你输入管理员密码或进行确认,请键入密码,或单击"继续"。

  2. 找到注册表子 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems 项,然后单击该子项。

  3. 右键单击 Windows 条目,然后单击"修改 "。

  4. "编辑 字符串"对话框的"值"数据部分,找到该条目,然后增加此条目的第二个值和第三 SharedSection 个值。

    备注

    • 注册表项的第二个值是与交互式窗口工作站关联的每个桌面的 SharedSection 桌面堆的大小。 对于在 WinSta0 (交互式窗口站中创建的每个桌面,堆) 。 该值以千字节 (KB) 为单位。
    • SharedSection 三个值是与非交互窗口工作站关联的每个桌面的桌面堆的大小。 该值以千字节 (KB) 为单位。
    • 建议不要为第二个值设置超过 20480 KB SharedSection 的值。

默认情况下,Windows 注册表项包含基于 x86 的 Windows 7 Service Pack 1 版本中的以下数据。

%SystemRoot%\system32\csrss.exe
ObjectDirectory=\Windows
SharedSection=1024,12288,512
Windows=On
SubSystemType=Windows
ServerDll=basesrv,1
ServerDll=winsrv:UserServerDllInitialization,3
ServerDll=winsrv:ConServerDllInitialization,2
ProfileControl=Off
MaxRequestThreads=16

Windows 7 Service Pack 1 (64 位) / Windows Server 2008 R2,2012 R2 (64 位)

SharedSection=1024,20480,768

在以后的操作系统中,内存分配是动态的。 因此,内存分配没有限制。 但是,如果向桌面堆分配过多内存,则可能会出现性能下降的情况。 这就是建议不要设置超过 20480 的值的原因

备注

桌面堆大小不受计算机上物理 RAM 的影响。 因此,无法通过添加物理 RAM 来提高性能。

这修复了问题

检查问题是否已修复。 如果问题已修复,您不用再往下看了。 如果问题没有修复,你可以联系技术支持部门

参考

桌面堆概述