文章编号: 126962 - 查看本文应用于的产品
展开全部 | 关闭全部

症状

当您运行大量基于 Windows 的程序时,如果尝试启动新程序或尝试使用已在运行的程序时会出现“Out of Memory”(内存不足)错误信息,即使您拥有充足可用的物理内存和页面文件内存也是如此。

原因

如果 WIN32 子系统中的桌面堆栈用尽,则会发生此问题。

注意此问题更常出现在 Windows NT 3.5 环境中,因为该环境中桌面堆栈的默认大小为 512K。在 Windows NT 3.1 环境中,默认值为 3072K。减少默认值可提高性能。

解决方案

重要说明 此部分、方法或任务包含有关如何修改注册表的步骤。但是,注册表修改不当可能会出现严重问题。因此,请一定严格按照下列步骤操作。为了获得进一步保护,请在修改注册表之前对其进行备份。这样就可以在出现问题时还原注册表。有关如何备份和还原注册表的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
322756 如何在 Windows 中备份和还原注册表
若要我们为您解决该问题,请转到“帮我修复此问题”部分。如果您想亲自解决该问题,请转到“我自己修复此问题”部分。

帮我修复此问题



若要自动修复此问题,请单击“修复此问题”按钮或链接。单击“文件下载”对话框中的“运行”,并按照修复此问题向导中的步骤执行操作。

修复此问题
Microsoft Fix it 50496

注意
  • 该向导可能只有英文版本。但是自动修复功能同样适用于其他语言版本的 Windows。
  • 如果所使用的计算机中并未出现此问题,则可将“修复此问题”解决方案保存至闪存驱动器或 CD 中,然后在出现此问题的计算机上运行该解决方案。
  • 如果此方法仍然无法解决问题,请增加计算机的内存。

接下来,请您转到“此方法是否已修复问题?”部分。



我自己修复此问题

若要解决此问题,请增加桌面堆栈的大小:
  1. 运行注册表编辑器 (Regedt32.exe)。
  2. HKEY_LOCAL_MACHINE
    子树,转到以下项:
    \System\CurrentControlSet\Control\Session Manager\SubSystems
  3. 选择“Windows”值。
  4. “编辑”菜单中,选择“字符串”
  5. 增加 SharedSection 参数。

    对于 Windows NT:
    SharedSection 使用以下格式指定系统和桌面堆栈:
    SharedSection=xxxx,yyyy
    yyyy 数字后面添加“,256”或“,512”。

    对于 Windows 2000、Windows XP 和 Windows Server 2003:
    SharedSection 使用以下格式指定系统和桌面堆栈:
    SharedSection=xxxx,yyyy,zzzz
    对于 32 位操作系统,将 yyyy 值提高到“12288”;
    zzzz 值提高到“1024”。
    对于 64 位操作系统,将 yyyy 值提高到“20480”;
    zzzz 值提高到“1024”。

更多信息

Windows NT 对桌面上运行的所有基于 Windows 的程序使用特殊的内存堆栈。桌面堆栈用于所有对象(窗口、菜单、笔、图标等)。运行大量基于 Windows 的程序时,此堆栈可能内存不足。如果没有足够的内存来满足分配请求,则系统通常返回一个错误,通知用户运行时内存不足。某些程序无法正确处理失败,在某些情况下,可能没有足够的内存来创建错误消息对话框。结果,请求的操作失败且没有任何提示。

使用注册表编辑器查看 SharedSection 注册表项时,该项是一个长字符串。此项的默认值如下。
%SystemRoot%\system32\csrss.exe
ObjectDirectory=\Windows
SharedSection=1024,3072,512
Windows=On
SubSystemType=Windows
ServerDll=basesrv,1
ServerDll=winsrv:GdiServerDllInitialization,4
ServerDll=winsrv:UserServerDllInitialization,3
ServerDll=winsrv:ConServerDllInitialization,2
ProfileControl=Off
MaxRequestThreads=16
				


第一个 SharedSection 值 (1024) 用于定义所有桌面的常用堆栈大小。这包含全局句柄表(窗口句柄是在计算机范围内是唯一的)和共享系统设置(如 SystemMetrics)。通常不需要更改此值。

第二个 SharedSection 值 (3072) 用于控制与交互式窗口站(用于 Windows 对象)关联的桌面堆栈的大小。此静态值用于防止操作错误的应用程序消耗过多资源。由于桌面堆栈被映射到每个进程的地址空间中,因此不应将此值设置为任意高的值(因为这会降低性能),而只应将该值提高到足以运行所有所需应用程序的程度。

第三个 SharedSection 值 (512) 用于控制与“非交互式”窗口站相关联的每个桌面的桌面堆栈的大小。如果此值不存在,则非交互式窗口站的桌面堆栈大小将与交互式窗口站的指定大小(第二个 SharedSection 值)相同。
有关 SharedSection 注册表项参数的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
184802 PRB:User32.dll 或 Kernel32.dll 无法初始化

此方法是否已修复问题?

  • 检查该问题是否已修复。如果该问题已修复,则您已完成此部分。如果该问题未修复,则可以联系技术支持人员
  • 非常感谢您提供反馈意见。若要提供反馈意见或报告使用此解决方案出现的任何问题,请在“帮我修复此问题”博客中留言或向我们发送电子邮件

属性

文章编号: 126962 - 最后修改: 2010年11月10日 - 修订: 3.0
这篇文章中的信息适用于:
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Windows NT Workstation 3.5
  • Microsoft Windows NT Workstation 3.51
  • Microsoft Windows NT Workstation 4.0 开发员版
  • Microsoft Windows NT Server 3.51
  • Microsoft Windows NT Server 4.0 Standard Edition
  • Microsoft Windows NT Advanced Server 3.1
  • Microsoft Windows XP Home Edition
  • Microsoft Windows XP Professional Edition
  • Microsoft Windows Server 2003 Datacenter Edition
  • Microsoft Windows Server 2003 Enterprise Edition
  • Microsoft Windows Server 2003 Standard Edition
  • Microsoft Windows Server 2003 Web Edition
关键字:?
kbenv kbmsifixme kbfixme KB126962
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com