性能与资源

修复桌面堆限制问题和内存不足问题 - Windows Server

· 52CE 我爱测

本文讨论称为桌面堆的资源的限制。 当此资源耗尽时,它可能会导致图形故障、内存不足错误和意外行为。 原始 KB 数: 947246 识别桌面堆耗尽的症状 当桌面堆耗尽时,你可能会在事件日志中看到事件,例如: 在较新版本的Windows中,该事件包括更多详细信息: 此事件每会话只记录一次,因此,在用户首次注意到症状之前,可以记录事件数分钟甚至数小时。 计算机上的每个会话都有自己的桌面堆。 登录到系统的每个用户都有自己的桌面堆。 会话 0 是后台服务运行的独立会

本文讨论称为桌面堆的资源的限制。 当此资源耗尽时,它可能会导致图形故障、内存不足错误和意外行为。

原始 KB 数: 947246

识别桌面堆耗尽的症状

当桌面堆耗尽时,你可能会在事件日志中看到事件,例如:

  Log name: System
  Event ID: 243
  Level: Warning
  Source: Win32k
  Description: A desktop heap allocation failed.

在较新版本的Windows中,该事件包括更多详细信息:

  Log name: System
  Event ID: 243
  Level: Warning
  Source: Win32k
  Description: A desktop heap allocation failed. Process ID: 14012. Process name: conhost.exe. Thread ID: 14260. Session ID: 0

此事件每会话只记录一次,因此,在用户首次注意到症状之前,可以记录事件数分钟甚至数小时。

计算机上的每个会话都有自己的桌面堆。 登录到系统的每个用户都有自己的桌面堆。 会话 0 是后台服务运行的独立会话,具有自己的桌面堆。

当用户的桌面堆耗尽时,该用户可能会遇到图形故障,例如窗口未按预期显示。 或者窗口可能显示,但它可能缺少某些元素,例如按钮、滚动条等。

桌面堆的默认大小通常足以供大多数用户使用,但同时打开许多应用程序窗口时,桌面堆耗尽仍可能发生。

当会话 0 的桌面堆耗尽时,它可以对整个系统产生负面影响,对所有已登录用户产生负面影响。 由于会话 0 不应包含任何图形元素,因为它对用户不可见,因此会话 0 的桌面堆与标准用户相比非常小。

切勿忽略此警告,尤其是在会话 0 中发生桌面堆耗尽时。 会话 0 的桌面堆耗尽可能是许多表面上无关的行为的根本原因,而且很难诊断。

发生这种情况时,用户还可能会看到其他通用的“内存不足”错误消息,因为应用程序尝试创建新窗口但无法执行此操作。

桌面堆耗尽的原因

此问题因桌面堆限制而发生。 关闭某些窗口,然后尝试打开其他窗口时,这些窗口可能会打开。 但是,此方法不会影响桌面堆限制。 会话 0 是一个特别会议。 当桌面堆耗尽发生在会话 0 中时,可能会导致整个系统中出现不期望和意外的行为。

如何修改桌面堆大小以修复错误

重要

此部分(或称方法或任务)介绍了修改注册表的步骤。 但是,注册表修改不当可能会出现严重问题。 因此,按以下步骤操作时请务必谨慎。 作为额外保护措施,请在修改注册表之前先将其备份。 如果之后出现问题,您就可以还原注册表。 有关如何备份和还原注册表的详细信息,请参阅:如何备份和还原 Windows 中的注册表。 通常情况下,不要增加桌面堆的大小。 仅在必要时增加它。 此外,不能修改会话 0 桌面堆。 以下信息仅适用于用户桌面堆。

若要解决此问题,请按照以下步骤修改桌面堆大小:

  1. 选择**“开始”**,在*“开始搜索*”框中键入 regedit,然后在“程序”列表中选择 regedit.exe。

    注意

    如果系统提示输入管理员密码或进行确认,请键入密码,或选择“ 继续”。

  2. 找到并选择 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems 注册表子项。

  3. 右键单击 Windows 条目,然后选择“ 修改”。

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

    注意

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

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

%SystemRoot%\system32\csrss.exe ObjectDirectory=\Windows SharedSection=1024、12288,512 Windows=开启 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 来提高性能。

资料来源与适用范围

资料来源
微软官方中文故障文档
适用范围
适用于用户桌面堆。
内容语言
中文;命令、路径和错误标识保留技术原文
本地收录日期
2026-10-26
授权说明
CC BY 4.0

正文与所需资源由本站本地存储。查看来源及更新记录 ↗

请按适用版本和实际日志确认原因;本站没有对每一种系统或设备逐项执行文中的操作。