Windowsを使っていると、「デスクトップヒープが不足しています」というエラーや、ウィンドウが開けなくなる、アプリが起動しないというトラブルに遭遇することがあります。
「デスクトップヒープって何?」と疑問に思う方も多いのではないでしょうか。
この記事では、デスクトップヒープとは何か、Windowsのシステムメモリ管理における役割について、ユーザーオブジェクト・GDIオブジェクト・リソース制限まで詳しく解説しています。
Windowsのシステム管理を担当している方や、関連するトラブルに悩んでいる方はぜひ参考にしてください。
デスクトップヒープとは?Windowsにおける基本的な意味
それではまず、デスクトップヒープの基本的な意味について解説していきます。
デスクトップヒープとは、Windowsのカーネルセッションごとにウィンドウ・メニュー・フック・アイコンなどのユーザーインターフェースオブジェクトを格納するためのメモリ領域のことです。
Windowsはデスクトップ(対話型デスクトップ・スクリーンセーバーデスクトップなど)ごとにこのヒープを確保しており、デスクトップヒープが枯渇するとウィンドウの作成・アプリの起動ができなくなります。
ユーザーオブジェクトとGDIオブジェクトの関係
Windowsでは「ユーザーオブジェクト」と「GDIオブジェクト」という2種類のシステムリソースが使われています。
| オブジェクトの種類 | 代表的なもの | 制限の仕組み |
|---|---|---|
| ユーザーオブジェクト | ウィンドウ・メニュー・フック・アクセラレータ | デスクトップヒープの容量に依存 |
| GDIオブジェクト | ブラシ・ペン・フォント・ビットマップ・DC | プロセスあたり10,000個の上限 |
デスクトップヒープの規模とデフォルト設定
デスクトップヒープのサイズはWindowsのレジストリで設定されており、デフォルト値はWindowsのバージョンによって異なりますが、一般的には対話型デスクトップで3MB〜20MB程度です。
多数のウィンドウを開いたり、多くのGUIアプリを同時起動したりするとデスクトップヒープが消費され、上限に達するとシステムエラーが発生します。
デスクトップヒープが不足するケースと症状
続いては、デスクトップヒープが不足するケースと症状を確認していきます。
デスクトップヒープの枯渇は、特定の環境や使い方で発生しやすいトラブルです。
デスクトップヒープ不足の主な症状
デスクトップヒープが不足すると次のような症状が現れます。
新しいウィンドウが開けなくなる・アプリケーションの起動に失敗する・エラーダイアログが表示されない・タスクバーの反応が遅くなるなどの現象が典型的な症状です。
イベントビューアーには「ユーザー オブジェクト作成失敗」などのエラーが記録されることがあります。
サーバー環境・ターミナルサービスでの問題
Windowsサーバーのターミナルサービスやリモートデスクトップサービスでは、複数のユーザーセッションが同時に存在するため、デスクトップヒープの消費が特に大きくなります。
多数のユーザーが同時接続するサーバー環境では、デスクトップヒープの設定を増やす対応が必要になることがあります。
デスクトップヒープのサイズを変更する方法
続いては、デスクトップヒープのサイズを変更する方法を確認していきます。
デスクトップヒープのサイズはWindowsのレジストリを編集することで変更できます。
レジストリでデスクトップヒープを変更する手順
デスクトップヒープのレジストリキー:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems
「Windows」の値の中に含まれる「SharedSection」パラメータを変更する
例:SharedSection=1024,20480,768
(第2パラメータが対話型デスクトップのヒープサイズ(KB単位))
この設定を変更した後はシステムを再起動する必要があります。
レジストリの編集は誤った操作でシステムに重大な影響が出る可能性があるため、変更前に必ずバックアップを取ることを強くおすすめします。
GDIオブジェクトとユーザーオブジェクトの使用量を確認する方法
タスクマネージャーの「詳細」タブでは、各プロセスのGDIオブジェクト数とユーザーオブジェクト数を確認できます。
GDIオブジェクトが9,000個以上、またはユーザーオブジェクトが多数に達しているプロセスがある場合は、そのアプリケーションのリソースリークを疑うことが重要です。
「列の選択」からGDIオブジェクト列とユーザーオブジェクト列を表示に追加することで確認できます。
まとめ
この記事では、デスクトップヒープとは何か、Windowsのシステムメモリ管理における役割について詳しく解説しました。
デスクトップヒープはWindowsのGUI操作に不可欠なユーザーオブジェクトを格納するシステム領域であり、不足するとウィンドウやアプリの起動に支障をきたします。
トラブルが発生した場合はタスクマネージャーでオブジェクト数を確認し、必要に応じてレジストリでサイズを調整しましょう。