Print Screen がうまくいかない時はリソース不足の可能性がある。PagedPoolSize を ffffffff にすると解消するかもしれない。

ただし XP まで。Vista 以降は潤沢にリソースを確保できる。


Ask CORE : リソース不足について - 第 3 回
http://blogs.technet.com/askcorejp/archive/2009/07/07/3261763.aspx


いろんなアプリケーションを起動しながら画面のスクリーンショットを取ろうとすると、うまくいかないことがある。
クリップボードの中身を見てみると、スクリーンショットは取れているんだけど白黒だったりする。あるいは、メモリが不足している旨のメッセージが出たりする。


そんな時は「リソース」が足りないかもしれない。「メモリ」とはちょっと違う。
メモリよりも限定された、OS が専用に確保する領域。メモリの一部。


いくらメモリがたくさんあっても、メモリよりも少ないリソースの方が使い切られてしまうと、そこでエラーになる。「メモリはまだ使い切られていないのに」と思っても、「足りません」の一点張り。


Process Explorer と Debugging Tools for Windows を使うと、リソースの使用状況が分かる。
(使い方は上記の URL で確認できます)


Process Explorer を起動して「Options」メニューの「Configure Symbols」で下記のようにやると、「System Information」で「Paged Limit」と「Nonpaged Limit」が見えるようになる。Debugging Tools for Windows は予めインストールしておく。

Dbghelp.dll path: C:\Program Files\Debugging Tools for Windows\dbghelp.dll
Symbols path: http://msdl.microsoft.com/download/symbols


System Information の Kernel Memory の欄がこんな感じになっている。
f:id:dechnostick:20100114003513p:image
(メモリは 2GB)
Paged Virtual が Paged Limit に迫っていて、待ったなしの状況。


こうなってるともう、色んなことが残念になってくる。

  • スクリーンショットが取れなくなる
  • ウィンドウの描画が崩れる
  • 文字が消える
  • アイコンが黒くなる
  • ネットワークフォルダにアクセスできなくなる
  • 印刷に失敗する


この上限値を決めているのがレジストリ。OS 起動時に、搭載されているメモリの容量をもとに上限が決定される。
だけど、「もうちょっと多めに取ってもいいんじゃない?」っていうぐらい控えめなことがある。
上の図はかなり控えめだと思う。


レジストリはここ。

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management]

ここにある PagedPoolSize はデフォルトが 0。これを ffffffff にする。
0 は OS が上限を計算するの意。ffffffff はシステムの制限いっぱいまで。


そして再起動。


Paged Limit が上昇。これでリソース不足は解消する。
f:id:dechnostick:20100114003514p:image