0

アプリケーションが使用できるウィンドウ ハンドルの量について調査していました。私は Delphi XE2 を使用しており、Windows メッセージの受信と処理に CreateWindowsEx を使用して非表示の Windows ハンドルを作成する AllocateHWnd ルーチンを使用しています。

興味深いものをいくつか見つけたので、専門家からなぜそのような振る舞いをするのか知りたい.

サービス アプリケーションを作成するとき、Windows 7 マシンで最大 2220 のハンドルに到達できます。サービス構成で [サービスがデスクトップと対話することを許可する] オプションを有効にすると、約 9823 のハンドルに到達できます!

Windows 2008 も同じように動作します。非対話型サービスでは最大 2220 個のハンドルを作成でき、対話型サービスでは 9000 個を超えるハンドルを作成できます

Windows 2012 サーバーでテストしましたが、対話型サービス フラグをオンにしても、2050 を超えるハンドルを作成できません...なぜそのような制限があり、どうすればそれを増やすことができますか?

それほど多くのハンドルを使用するソフトウェアは設計が不十分であることはわかっていますが、インバウンドおよび出力 TCP/IP 接続を処理するために多くのハンドルを必要とする集中的な TCP/IP 接続処理を行うソフトウェアに対してこれをテストしています。

私のアプリケーションが通常のデスクトップ アプリケーションである場合、Windows 2012 でも 9000 を超えるハンドルを作成できます。

4

1 に答える 1

2

「デスクトップヒープの枯渇」症候群に直面しているように聞こえます。それについての優れた説明は、Ntdebuggingのブログで見つけることができます:

とにかく、@ DavidHeffernanが言ったように、アプリを再設計する方が良いです:)

于 2012-12-13T17:45:46.020 に答える