SWTアプリケーションでWindowsのみの問題の原因を突き止めようとしていますが、次のエラーが発生することがあります。
org.eclipse.swt.SWTError: No more handles
このエラーをスローする行をトレースすると、CreateWindowEx Windows API関数が呼び出されていることがわかります。これは、空きGDIハンドルがない場合に失敗する可能性があります。
リモートデスクトップを介して、Windows Server 2008ビルドサーバーの1つでアプリケーションに対してテストを実行すると、エラーが定期的に発生します。
これまでに、SWT ImageおよびFontオブジェクトのリークをいくつか見つけて修正しました。そのうちのいくつかは、アプリケーションの呼び出しごとに数百のGDIハンドルがリークする結果になりました。
ただし、(意図的に多くのハンドルを使用するテストアプリケーションを使用して)問題を修正したことを確認するのに苦労しています。私のテストアプリケーションは、プロセスあたりの制限である10,000GDIハンドルに達しました。シリアルに実行しても問題は発生しません。2つまたは3つを同時に実行します。
それで、ついに私の質問が来ます:
どのような状況でも、WindowsのGDIハンドルがそれを作成したプロセスよりも長持ちする可能性はありますか?
もしそうなら、これらの「リークされた」GDIハンドルの数を表示するために使用できるツールはありますか?