我写了一个应用程序,在其中我偶尔发现EOutofResources错误
将TBitmap32保存到流时,由Graphics单元的GDIError方法引发。
据我所知,它可能来自gdi限制或堆限制。
我知道该过程的默认限制为10000个句柄。
因此,根据任务管理器,我的应用程序仅报告620。
我已经下载并运行了Desktop Heap Information Monitor工具,该工具报告了以下信息:
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
-------------------------------------------------------------
如上所述,我仅在winsta0中使用了44%的桌面堆。
此外,该错误会不时出现。它从来没有达到提到的极限。
我如何检查问题出在哪里?是什么引起此错误?
谢谢
最佳答案
您可能有资源和/或内存泄漏。
查找内存泄漏
如果使用FastMM的调试版本,它将在程序关闭时向您显示内存泄漏的报告。
以下文章将为您提供帮助:
http://wiert.wordpress.com/2009/07/29/delphi-fastmm-using-fastmm4-for-debugging-your-memory-allocations-part-1-introduction/
查找资源泄漏
请注意,FastMM虽然是查找内存泄漏的重要工具,但不会找到资源泄漏。
AQTime可以找到这些,并且有30天的跟踪期。在以下位置查看:
http://smartbear.com/products/development-tools/performance-profiling/
如果要使用开源资源泄漏工具,请尝试:http://www.kbasm.com/denomo.html
好打猎。