W-Zero3 用のメモリ状況を表示するアプリケーションを作ってみたところ、メモリの挙動がおかしい。
たとえば、
起動初期状態で25MBほどあるフリーメモリーが、アプリを起動した後は22MBぐらいになる。
その後、メールを見たり、IEを開いたり、いろいろ使っているうちに10MBぐらいになる。
その後、すべてのアプリケーションを閉じてメモリを解放しても、初期の25MBには戻らず、15MB程度になる。
最初、プログラムのメモリ管理が悪く、Disposeまわりでメモリーリークが発生しているのかと思っていろいろやってみたが、先にポスとしたプログラムなので、そんなメモリリークが発生するような複雑なコードではない。
MSDN を調べてみたところ、やはりシステム側で動的にキャッシュを管理しているということですね。
MSDN の記事は次の通り。
『
RAM ストレージ
RAM ストレージ
ランダム アクセス メモリ (RAM) を使用して、動的なデータ構造と JIT でコンパイルされたコードを保存します。.NET Compact Framework は、デバイスで指定された制限内で、使用可能な RAM を使用して生成されたコードやデータ構造をキャッシュし、後から適宜メモリを解放します。
メモリ不足になると、共通言語ランタイムではコードピッチ技法を使用して、JIT でコンパイルされたコード ブロックを実行時に解放します。これにより、RAM に制約のあるシステムで大きいプログラムを実行するときに、パフォーマンスの低下を最小限に抑えることができます。
』