德尔福EOutOfResources(GDIError)
我写了一个应用程序,其中我发现在将TBitmap32保存到流时,由Graphics单元的GDIError方法引发的偶发EOutofResources错误 。德尔福EOutOfResources(GDIError)
据我所知,它可能来自gdi限制或堆限制。 我知道这个过程有一个10000个句柄的默认限制。 所以根据任务管理器仅报告620
我已经下载并运行桌面堆信息监视工具,其报告本我的应用程序:
Desktop Heap Information Monitor Tool (Version 8.1.2925.0)
Copyright (c) Microsoft Corporation. All rights reserved.
-------------------------------------------------------------
Session ID: 0 Total Desktop: ( 7360 KB - 11 desktops)
WinStation\Desktop Heap Size(KB) Used Rate(%)
-------------------------------------------------------------
WinSta0\Default 3072 44.5
WinSta0\Disconnect 64 4.5
WinSta0\Winlogon 128 10.2
Service-0x0-3e7$\Default 512 29.1
Service-0x0-3e4$\Default 512 6.8
Service-0x0-3e5$\Default 512 6.8
SAWinSta\SADesktop 512 0.5
__X78B95_89_IW\__A8D9S1_42_ID 512 0.5
Service-0x0-1ae39$\Default 512 2.4
Service-0x0-12d284a7$\Default 512 2.5
Service-0x0-1312b6d4$\Default 512 15.0
-------------------------------------------------------------
正如上面我只用44%的桌面堆在winsta0中。
此外,此错误不时引发。它永远达不到上述限制。 我如何检查问题出在哪里?是什么导致了这个错误?
谢谢
您可能有资源和/或内存泄漏。
查找内存泄漏
如果使用FastMM的调试版本,它会告诉你的内存泄漏的报告程序关闭时。
查找资源泄漏
注意FastMM,而寻找内存的必备工具泄漏没有找到资源泄漏。
AQTime可以找到那些,它有一个30天的跟踪期。瞧瞧吧:
http://smartbear.com/products/development-tools/performance-profiling/
如果你想要一个开源的资源泄漏的工具尝试:http://www.kbasm.com/denomo.html
好猎手。
这可能不是资源错误。有时Delphi会报告无法将GDI错误转换为特定错误消息的资源外。在Graphics.pas中查看GDIError的实现。
如果你可以在IDE中重现这一点,找出发生在何处/为什么的最好方法可能是在编译器设置中启用Use Debug DCUs选项,并在运行时启用Stop On Delphi Exceptions调试器选项应用程序。
'不能翻译'(或:那太无聊了翻译),如[本答案](http://*.com/a/2181633/2932052)中所述, – Wolf 2015-01-27 15:26:34
也许你正在泄漏位图句柄? – 2011-05-18 14:32:41
我认为你应该发布相关的代码。 – Sam 2011-05-19 03:04:20