delphi – 系统错误 代码:8.没有足够的存储可用于处理此命令

前端之家收集整理的这篇文章主要介绍了delphi – 系统错误 代码:8.没有足够的存储可用于处理此命令前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们有几个Win32应用程序(在Delphi 2006中编码),有时用户会收到一条错误消息“系统错误代码:8.没有足够的存储可用于处理此命令。

从stacktrace看起来它总是在CreateWnd调用期间

Main ($1edc):
004146cc +070 app.exe SysUtils               RaiseLastOSError
00414655 +005 app.exe SysUtils               RaiseLastOSError
004ce44c +130 app.exe Controls               TWinControl.CreateWnd
00535a72 +022 app.exe cxControls             TcxControl.CreateWnd
004ce82a +016 app.exe Controls               TWinControl.CreateHandle
00553d21 +005 app.exe cxContainer            TcxContainer.CreateHandle
00586ef1 +005 app.exe cxEdit                 TcxCustomEdit.CreateHandle
005c331d +005 app.exe cxDropDownEdit         TcxCustomDropDownEdit.CreateHandle
004ceaf0 +074 app.exe Controls               TWinControl.UpdateShowing
004ceb1e +0a2 app.exe Controls               TWinControl.UpdateShowing
004cebdc +03c app.exe Controls               TWinControl.UpdateControlState
004d118a +026 app.exe Controls               TWinControl.CMVisibleChanged
004cb713 +2bb app.exe Controls               TControl.WndProc
004cf569 +499 app.exe Controls               TWinControl.WndProc
004b727d +4c1 app.exe Forms                  TCustomForm.WndProc
004cb3a0 +024 app.exe Controls               TControl.Perform
004c9f6a +026 app.exe Controls               TControl.SetVisible
004b6c46 +03a app.exe Forms                  TCustomForm.SetVisible
004baf1b +007 app.exe Forms                  TCustomForm.Show
004bb151 +14d app.exe Forms                  TCustomForm.ShowModal
007869c7 +0d3 app.exe UfrmPrice      770 +19 TfrmPrice.EditPrice
0078655d +009 app.exe UfrmPrice      628  +0 TfrmPrice.actNewBidExecute
00431ce7 +00f app.exe Classes                TBasicAction.Execute
004c2cb5 +031 app.exe ActnList               TContainedAction.Execute
004c397c +050 app.exe ActnList               TCustomAction.Execute
00431bb3 +013 app.exe Classes                TBasicActionLink.Execute
004af384 +090 app.exe Menus                  TMenuItem.Click
004b059f +013 app.exe Menus                  TMenu.DispatchCommand
004b16fe +082 app.exe Menus                  TPopupList.WndProc
004b164d +01d app.exe Menus                  TPopupList.MainWndProc
004329a8 +014 app.exe Classes                StdWndProc
7e4196b2 +00a USER32.dll                     DispatchMessageA
004bea60 +0fc app.exe Forms                  TApplication.ProcessMessage
004bea9a +00a app.exe Forms                  TApplication.HandleMessage
004becba +096 app.exe Forms                  TApplication.Run
008482c5 +215 app.exe AppName        129 +42 initialization

我从来没有能够到底是什么导致这一点,因为它发生很少,我没有关心,但我想找出原因,并希望纠正它…

编辑:全栈跟踪

编辑2:更多信息…今天经历过的客户端已经安装了我的应用程序大约4个月,它是在他的电脑上运行每天8小时。这个问题只出现在今天,并保持重现,即使他杀了我的应用程序,并重新启动它。他的系统上没有其他应用程序表现得奇怪。重新启动后问题完全消失。这是否指向Steve提到的堆短缺?

编辑3:有趣的msdn博客文章herehere关于桌面堆的话题。虽然我不知道这是否是这个问题的原因,它肯定看起来可能。

解决方法

如果你的程序使用了大量的Windows资源,它可能是一个资源堆短缺。

有一个注册表项可以增加来提高XP的堆大小。对于Vista,Microsoft已经将默认值设置为更高。我建议将默认值3072更改为至少8192。

此信息记录在MS Knowledge Base(或搜索“内存不足”)。关于参数值的附加细节可以在文章KB184802中找到。

我建议你阅读知识库文章,但更改的基本信息是:

>运行注册表编辑器(REGEDT32.EXE)。
>从HKEY_ LOCAL_MACHINE子树,转到以下项:

\System\CurrentControlSet\Control\Session Manager\SubSystem

>在屏幕的右侧双击键:

windows

>在弹出窗口中,您将看到一个非常长的字段。将光标移动到字符串开头附近(值可能不同):

SharedSection=1024,3072,512

> SharedSection使用以下格式指定系统和桌面堆:SharedSection = xxxx,yyyy,zzz其中xxxx定义系统范围堆的最大大小(以千字节为单位),yyyy定义每个桌面堆的大小,zzz定义一个“非交互”窗口站的桌面堆的大小。
>将ONLY yyyy值更改为8192(或更大),然后按OK。
>退出注册表编辑器并重新启动PC以使更改生效。

祝你好运。

猜你在找的Delphi相关文章