日別アーカイブ: 2007年11月18日

Windows Vista x64 のデスクトップアプリケーションヒープ

Vista x64 環境に移行して、以前よりも安定して運用できています。
今のところ自分の使う範囲では、ソフトもハードも特に困ったことはなく
メリットが大きいので気に入っています。
といっても必ずしも RAM 増えたわけでもなく、仕事で使ってる PC は
x86 時代と同じ 2GB のまま。
具体的にどこが違うのかといえば、ウィンドウを大量に開いても動作が
不安定にならなくなりました。

x86 で Console x5、VisualStudio 2005、Maya、IE7 等を起動した
状態でさらに Vim を 14 枚ほど開くと、ウィンドウの UI パーツが
ところどころ表示されなくなっていました。
ツールによっては保存等のダイアログが表示されなくなったり、いろいろ
挙動があやしくなります。

調べてみると、これはデスクトップアプリケーション用ヒープが足りない
状態に相当するようです。デスクトップアプリケーションヒープはこの辺に
多少説明があります。

Microsoft [PRB] User32.dll または Kernel32.dll の初期化に失敗する
MS デスクトップ アプリケーションのヒープを増やす

メインメモリの容量に関係なく、このヒープは一律 3MB 割り当てられて
いるようです。レジストリの設定で増やせますが、大幅な追加は推奨し
ていないようです。目いっぱい RAM を搭載できる現在、これがどの程度
システムに影響を与えるのか、その根拠についてはわかりません。

Vista x64 で同レジストリエントリを調べると、32bit OS のおよそ
6.6倍に相当する 20MB 割り当てられていました。

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

安定の原因は、単にこのデスクトップヒープが増えたおかげでしょうか。
そもそもヒープが足りなくなる原因はメモリリークらしいので、
もしそうだとしたら根本的な解決ではなく、先送りにしているだけ
かもしれません。

原因不明のメモリ不足エラーに対処する方法(デスクトップ・アプリケーション・ヒープ不足エラーに対処する方法)