.NET Compact Framework でのデバイス メモリ管理
更新 : 2007 年 11 月
.NET Compact Framework の重要な長所は効率的なリソースの使用にあり、特に揮発性 RAM が重大な役割を果たします。ハードウェアのメモリ管理ユニット (MMU: Memory Management Unit) またはオペレーティング システムの仮想メモリをデバイスに用意する必要はありません。
.NET Compact Framework の記憶領域のサイズ
.NET Compact Framework version 3.5 については、後の「CAB ファイルのインストール」を参照してください。.NET Compact Framework version 3.5 は、現時点では ROM に含まれていません。
.NET Compact Framework version 2.0 の場合、記憶領域のサイズは次のとおりです。
- Windows Mobile 5.0 の場合は、圧縮なしで 5.5 MB (ROM)
メモ : |
---|
Windows Mobile 5.0 以降は、永続ストレージは圧縮されません。 |
.NET Compact Framework version 1.0 の場合、記憶領域のサイズは次のとおりです。
Pocket PC 2000 および 2002 の場合は、圧縮後 1.55 MB (ROM)
Windows Mobile 2003 for Pocket PC および Windows Mobile 2003 for Smartphone の場合は、圧縮後 1.35 MB (ROM)
実行時に必要な RAM は次のとおりです。
- 0.5 MB 以上 (アプリケーションによって異なります)
通常のアプリケーション サイズは次のとおりです。
- 5 ~ 100 KB
CAB ファイルのインストール
メモリ カードがある場合、.NET Compact Framework Version 2.0 Service Pack 1 およびそれ以降のバージョンのインストール中に、デバイスとメモリ カードのどちらにインストールするかをたずねるメッセージが表示されます。メモリ カードへのインストールを選択すると、メモリ カードにグローバル アセンブリ キャッシュが配置され、\Windows ディレクトリに共通言語ランタイム (CLR: Common Language Runtime) 用のファイルが配置されます。.NET Compact Framework version 3.5 では、グローバル アセンブリ キャッシュには約 5.2 MB、CLR には 1.3 MB がそれぞれ必要です。
CAB ファイル インストール時の .NET Compact Framework のパフォーマンスは、ハードウェアおよびソフトウェアでのメモリの実装方法に応じて異なります。一部のデバイスでは、メモリ カードにグローバル アセンブリ キャッシュをインストールするとパフォーマンスが向上する場合があります。
メモリ使用状況
.NET Compact Framework は、次の特徴を持つシステムで最適に動作するようにデザインされています。
バッテリ駆動型
.NET Compact Framework とそのアプリケーションを保存するために、フラッシュ メモリまたは RAM ファイル システムの約 5 ~ 10 倍の容量の DRAM (Dynamic RAM) を搭載したシステム
DRAM に 128 KB ~ 1 MB の作業領域を持つシステム
オプションのハード ドライブ
.NET Compact Framework は、利用可能なシステム メモリを無駄なく使用します。アプリケーションを実行しない限り、RAM にはアクセスしません。さらに、プログラムを終了すると .NET Compact Framework によって RAM は解放されます。ネイティブ オペレーティング システムに独自のメモリ保護機能を用意する必要はありません。所有されていないメモリにアクセスした場合は、常に例外がスローされます。
.NET Compact Framework では、メモリ不足になると、現在実行しているコードに必要のない内部データ構造を積極的に解放します。そのため、メモリが不足した状態になってもプログラムを継続できます。使用できるメモリが少なく、アプリケーションに必要なメモリが不足している場合、.NET Compact Framework はアプリケーションを完全に閉じて、基底にあるすべてのリソースを解放します。メモリ不足によって .NET Compact Framework 自体に障害が発生することはありません。
アプリケーション ドメイン ホストが、.NET Compact Framework アプリケーションと共通言語ランタイムを開始します。.NET Compact Framework アプリケーションは、ネイティブ アプリケーションと同じ方法でコード空間、静的および動的なデータ空間を使用します。.NET Compact Framework アプリケーションを実行していないときは、アプリケーション ドメイン ホスト以外の RAM への負荷はなく、少量の静的データが共通言語ランタイムによって使用されています。.NET Compact Framework アプリケーションを開始すると、Windows CE .NET がアプリケーション ドメイン ホストを作成します。
.NET Compact Framework アプリケーションは .exe ファイルと .dll ファイルにパッケージ化されて、フラッシュの読み取り専用ファイル システムまたは読み書き可能なファイル システム (または読み取り専用の場合は ROM) に保存されます。共通言語ランタイムのクラス ローダーは、直接アドレス指定が可能なブロックでファイルを読み取ることができるため、メモリのコピーを作成したり、メモリ管理ユニットによってファイルのメモリ マップ表示を作成したりする必要はありません。
開発者は、複数のデバイスでアプリケーションをテストして、デバイスごとのパフォーマンスの違いを理解することが奨励されます。
RAM ストレージ
ランダム アクセス メモリ (RAM) を使用して、動的なデータ構造と JIT でコンパイルされたコードを保存します。.NET Compact Framework は、デバイスで指定された制限内で、使用可能な RAM を使用して生成されたコードやデータ構造をキャッシュし、後から適宜メモリを解放します。
メモリ不足になると、共通言語ランタイムではコードピッチ技法を使用して、JIT でコンパイルされたコード ブロックを実行時に解放します。これにより、RAM に制約のあるシステムで大きいプログラムを実行するときに、パフォーマンスの低下を最小限に抑えることができます。
ROM ストレージ
共通言語ランタイムを形成するネイティブ コードは、読み取り専用メモリ (ROM) または RAM ファイル システムに常駐します。メモリ不足の状態になると、.NET Compact Framework は使用可能な ROM、フラッシュ、またはディスク ストレージを使用して、より低いパフォーマンスでアプリケーションの実行を継続できるようにします。
Microsoft Intermediate Language (MSIL) の命令とクラス ライブラリのメタデータが格納されたファイルは、ROM ファイル システムか RAM ファイル システムのいずれかに保存されます。クラス ライブラリは、ダウンロード可能なアプリケーションのインストール処理の一部として、読み書き可能なファイル システム内にダウンロードできます。