多数のプログラムを実行すると、「メモリ不足です」 エラー メッセージが表示されます

適用対象: Microsoft Windows XP Home EditionMicrosoft Windows XP ProfessionalMicrosoft Windows Server 2003 Datacenter Edition (32-bit x86)

現象


大量の Windows ベースのプログラムを実行すると、新しいプログラムを起動しようとするときや、既に実行されているプログラムを使用しようとするとき、まだ物理メモリやページファイル メモリが多くある場合でも、「メモリ不足」エラー メッセージが表示されます。

原因


この動作は、WIN32 サブシステムのデスクトップ ヒープが消耗している場合に発生します。


注: この問題は、Windows NT 3.5 でデスクトップ ヒープの規定サイズが 512K である場合、より頻繁に発生します。 Windows NT 3.1では、既定値は 3072K です。 デフォルトでは、パフォーマンスが向上しました。

解決方法


重要: このセクション、方法、またはタスクには、レジストリの変更方法が記載されています。 レジストリを誤って変更すると、深刻な問題が発生することがあります。 レジストリを変更する際には十分に注意してください。 万一に備えて、編集の前にレジストリをバックアップしてください。 問題が発生した場合でも、レジストリを復元できます。 レジストリのバックアップ方法および復元方法の詳細を参照するには、以下のサポート技術情報番号をクリックしてください。
322756 Windows でレジストリをバックアップおよび復元する方法
この問題を修正するには、デスクトップ ヒープのサイズを増やします:
  1. レジストリ エディタ (Regedt32.exe) を実行します。
  2. HKEY_LOCAL_MACHINE サブツリーから、次のキーに移動します:

    \システム\現在のコントロール セット\コントロール\セッション マネージャー\サブシステム
  3. Windows の値を選択します。
  4. [編集] メニューから、[文字列] を選択します。
  5. SharedSection パラメーターを増やします。


    Windows NTの場合:
    SharedSection は、次の形式を使用してシステムとデスクトップ ヒープを指定します:
    SharedSection=xxxx,yyyy
    yyyy 数の後に、「256」または「512」を追加します。

    Windows 2000、Windows XP、Windows Server 2003 の場合:
    SharedSection は、次の形式を使用してシステムとデスクトップ ヒープを指定します:
    SharedSection=xxxxyyyyzzzz
    32 ビット オペレーティング システムの場合は、yyyy 値を「12288」に増やします;
    zzzz 値を「1024」に増やします。
    64 ビット オペレーティング システムの場合は、yyyy 値を「20480」に増やします;
    zzzz 値を「1024」に増やします。

詳細情報


Windows NT は、デスクトップ上で実行されるすべての Windows ベースのプログラムで、特殊なメモリ ヒープを使用します。 デスクトップ ヒープは、すべてのオブジェクト(ウィンドウ、メニュー、ペン、アイコンなど)に使用されます。 大量の Windows ベースのプログラムが実行されている場合、このヒープはメモリ不足になる可能性があります。 割り当て要求を満たす十分なメモリがない場合、通常はエラーが返され、メモリが不足しているユーザーに通知されます。 プログラムによっては正常にエラーを処理しないことがあり、場合によっては、エラー メッセージ ダイアログ ボックスを作成するための十分なメモリがない場合があります。 その結果、要求された操作は、表示されずに失敗します。


SharedSection キーは、レジストリ エディターを使用して表示するときの長い文字列です。 このキーの既定値は以下のとおりです。

%SystemRoot%\system32\csrss.exe
ObjectDirectory=\Windows
SharedSection=1024,3072,512
Windows=On
SubSystemType=Windows
ServerDll=basesrv,1
ServerDll=winsrv:GdiServerDllInitialization,4
ServerDll=winsrv:UserServerDllInitialization,3
ServerDll=winsrv:ConServerDllInitialization,2
ProfileControl=Off
MaxRequestThreads=16


最初の SharedSection 値(1024)は、すべてのデスクトップに共通のヒープ サイズを定義します。 これには、グローバル ハンドル テーブル(ウィンドウ ハンドルは固有のマシン全体)と共有システム設定(SystemMetrics など)が含まれます。 この値を変更する必要はありません。

2 番目の SharedSection 値(3072)は対話型ウィンドウ ステーション(Windows オブジェクトに使用される)と関連するデスクトップ ヒープのサイズを制御します。 この静的値を使用して、誤って動作するアプリケーションが多くのリソースを消費しないようにします。 デスクトップ ヒープは各プロセスのアドレス空間にマップされるため、この値を任意の高値に設定することはできません(パフォーマンスを低下させる場合がある)が、実行に必要なすべてのアプリケーションが十分に向上される可能性があります。

3 番目のSharedSection 値(512)は、非対話型ウィンドウ ステーションに関連する各デスクトップのデスクトップ ヒープのサイズを制御します。 この値が提示されていない場合、非対話型ウィンドウ ステーションのデスクトップ ヒープのサイズは、対話型ウィンドウ ステーション(2 番目の SharedSection 値)に指定されたサイズと同じです。