3

TBitmap32 をストリームに保存するときに、Graphics ユニットの GDIError メソッドによって EOutofResources エラーが発生することがあるアプリケーションを作成しました。

私の知る限り、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
-------------------------------------------------------------

上記のように、winsta0 のデスクトップ ヒープの 44% しか使用していません。

また、このエラーは時々発生します。言及された制限に達することはありません。問題がどこにあるかを確認するにはどうすればよいですか? このエラーが発生する原因は何ですか?

ありがとう

4

2 に答える 2

2

これはおそらくリソース エラーではありません。Delphi は、特定のエラー メッセージに変換できない GDI エラーをリソース不足として報告することがあります。Graphics.pas の GDIError の実装を参照してください。

IDE でこれを再現できる場合、どこで、なぜそれが発生するのかを調べる最善の方法は、コンパイラ設定で [Use Debug DCUs] オプションを有効にし、アプリの実行中に [Stop On Delphi Exceptions] デバッガ オプションを有効にすることです。

于 2011-05-18T20:27:45.790 に答える
2

リソースやメモリのリークが発生している可能性があります。

メモリ リーク
の検出 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 を試してください。

良い狩り。

于 2011-05-18T19:27:38.140 に答える