症状当您运行大量基于 Windows 的程序时,如果尝试启动新程序或尝试使用已在运行的程序时会出现“Out of Memory”(内存不足)错误信息,即使您拥有充足可用的物理内存和页面文件内存也是如此。
原因如果 WIN32 子系统中的桌面堆栈用尽,则会发生此问题。
注意此问题更常出现在 Windows NT 3.5 环境中,因为该环境中桌面堆栈的默认大小为 512K。在 Windows NT 3.1 环境中,默认值为 3072K。减少默认值可提高性能。 解决方案重要说明 此部分、方法或任务包含有关如何修改注册表的步骤。但是,注册表修改不当可能会出现严重问题。因此,请一定严格按照下列步骤操作。为了获得进一步保护,请在修改注册表之前对其进行备份。这样就可以在出现问题时还原注册表。有关如何备份和还原注册表的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
322756
若要我们为您解决该问题,请转到“帮我修复此问题”部分。如果您想亲自解决该问题,请转到“我自己修复此问题”部分。(http://support.microsoft.com/kb/322756/ ) 如何在 Windows 中备份和还原注册表帮我修复此问题若要自动修复此问题,请单击“修复此问题”按钮或链接。单击“文件下载”对话框中的“运行”,并按照修复此问题向导中的步骤执行操作。 注意
接下来,请您转到“此方法是否已修复问题?”部分。 我自己修复此问题若要解决此问题,请增加桌面堆栈的大小:
更多信息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
(http://support.microsoft.com/kb/184802/ ) PRB:User32.dll 或 Kernel32.dll 无法初始化 此方法是否已修复问题?属性文章编号: 126962 - 最后修改: 2010年11月10日 - 修订: 3.0
这篇文章中的信息适用于:
|