Windows フォームアプリケーションで、フォーカス移動、キー入力が連続して行われた場合に GDI オブジェクトが増加する場合があります

現象

この資料は、.NET Framework の問題により、Windows フォームアプリケーションで GDI オブジェクトが増加する問題について説明しています。

多数の TextBox コントロールを配置した Windows フォームアプリケーションで、Enter キーによって TextBox を移動し続けるような操作を行った場合に、GDI オブジェクトが増加する可能性があります。
その結果、GDI オブジェクトの既定の上限である 10000 に達した場合には、アプリケーション例外などの予期しない問題が発生する場合があります。


プロセスが使用する GDI オブジェクト数は、タスク マネージャーから以下のように確認できます。
  1. タスク マネージャー を起動し、[プロセス] タブを選択します。
  2. [表示] メニューの [列の選択] をクリックし GDI オブジェクト を選択します。
  3. [プロセス] タブに表示されているプロセスの一覧から、アプリケーションのプロセスを確認します。

この操作により、アプリケーションのプロセスの [GDI オブジェクト] の数値を確認し、10000 に達すると、予期しない問題が発生する場合があります。


原因

Windows 7 では、フォーカスの移動時など、コントロールの描画が行われる際に、ちらつきがなく滑らかに表示されるような描画処理を行っています。
この処理では、別途 GDI オブジェクトを生成して描画行っており、通常は定期的にそのオブジェクトの解放が行われるようになっています。
しかしながら、コントロールのフォーカス移動とキー入力が連続で行われるような場合、オブジェクトの解放処理が遅延し、GDI オブジェクトが増加し続ける可能性があります。

本問題は、フォーカス移動時の描画処理で生成される GDI オブジェクトの解放が遅延するために発生します。
そのため、フォーカス移動を伴わない、TextBox コントロール内に文字を連続して入力するような場合には発生しません。
また、デスクトップ テーマによってスクリーン表示が制御されている際に発生する現象であるため、Windows クラシック テーマを使用している場合にはこの現象は発生しません。

状況

マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。
プロパティ

文書番号:2693980 - 最終更新日: 2016/09/29 - リビジョン: 1

フィードバック