最終的に 10,000 個の割り当てられた GDI オブジェクトに到達してクラッシュする GDI リークのあるアプリケーションを用意します。GDIProcessHandleQuotaを 20,000 に増やしてみましたが、オブジェクトが 10,000 に達したときにプログラムがクラッシュしました。現在、このリークにパッチを当てる作業を行っていますが、好奇心から、単一プロセスの GDI 制限を増やす方法はありますか? それとも、10k は個々のアプリケーションのハード リミットですか?
3 に答える
10Kは厳しい制限です。
GDIオブジェクトは、フォント、ビットマップ、ブラシ、ペン、デバイスコンテキスト(描画面)などのグラフィカルデバイスインターフェイスリソースを表します。USERオブジェクトの場合と同様に、ウィンドウマネージャーはプロセスを最大10,000個のGDIオブジェクトに制限します[...]
Mark Russinovichには、Windowsのさまざまな制限について詳しく説明した一連の記事があります。次の2つが便利です。
レイモンド・チェンからの別の良い記事:
うまくいくかもしれない解決策があります。ここでは、大量の GDI オブジェクトを割り当てる不適切なベンダーのアプリを扱っていますが、このソリューションにより、ほとんどの場合は機能します...
行う
reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems" /v windows
コンマで区切られた 3 つの数字を探しSharedSection=
ます。中間の数値を一度に 1024 ずつ増やして、問題が解決するかどうかを確認してください。この変数を使用して「デスクトップ ヒープ」の量を制御しているため、これまでは動作が不適切な GDI を実行することができました。
詳細については、 KB184802を参照してください。SharedSection を検索して、ページの関連部分を見つけます。