.NET Compact Framework 中的裝置記憶體管理

更新:2007 年 11 月

.NET Compact Framework 的一個重要優點為其有效率的資源使用,特別是揮發性 (Volatile) RAM。裝置不需要硬體記憶體管理單位 (MMU) 或作業系統虛擬記憶體。

.NET Compact Framework 儲存區大小

若是 .NET Compact Framework 3.5 版,請參閱說明 CAB 檔安裝的一節。.NET Compact Framework 3.5 版尚不適用於 ROM。

若是 .NET Compact Framework 2.0 版,儲存區大小如下: 

  • 5.5 MB (ROM),未壓縮,用於 Windows Mobile 5.0。
注意事項:

從 Windows Mobile 5.0 使用開始,持續性儲存體 (Persistent Storage) 就不再壓縮。

若是 .NET Compact Framework 1.0 版,儲存區大小如下:

  • 1.55 MB (ROM),壓縮,用於 Pocket PC 2000 和 2002。

  • 1.35 MB (ROM),壓縮,用於 Windows Mobile 2003 for Pocket PC 和 Windows Mobile 2003 for Smartphone。

執行的 RAM 需求:

  • 0.5 MB+ (依應用程式而定)。

一般的應用程式大小:

  • 5-100 KB。

CAB 檔案安裝

在安裝 .NET Compact Framework 2.0 Service Pack 1 (含) 之後的版本期間,系統會提示您選擇安裝到裝置或儲存卡 (如果存在)。如果您選擇安裝到儲存卡,全域組件 (Assembly) 快取就會放置到儲存卡上,而 Common Language Runtime (CLR) 的檔案會置入 \Windows 目錄中。在 .NET Compact Framework 3.5 版中,全域組件快取需要約 5.2 MB 的空間,而 CLR 需要 1.3 MB。

硬體和軟體中的記憶體實作 (Implementation) 會使 CAB 檔案安裝的 .NET Compact Framework 產生不同的效能。對於某些裝置而言,將全域組件快取安裝到儲存卡可以達成較佳效能。

記憶體使用方式

.NET Compact Framework 是設計在具有下列特性的系統上進行最佳化作業:

  • 以電池供電。

  • 在動態 RAM (DRAM) 中大約需要 5 至 10 倍的快閃記憶體或 RAM 檔案系統容量,以儲存 .NET Compact Framework 和其應用程式。 

  • 在 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 應用程式和 Common Language Runtime。.NET Compact Framework 應用程式會以與原生應用程式相同的方式,使用程式碼空間及靜態和動態資料空間。沒有 .NET Compact Framework 應用程式正在執行時,除了應用程式定義域主機之外,沒有其他 RAM 的消耗,只有 Common Language Runtime 會使用少量的靜態資料。啟動 .NET Compact Framework 應用程式時,Windows CE .NET 會建立應用程式定義域主機。

.NET Compact Framework 應用程式會封裝成 .exe 和 .dll 檔案,可以儲存在快閃記憶體中的唯讀或讀取/寫入檔案系統 (或唯讀 ROM)。Common Language Runtime 類別載入器可以在可直接定址區塊中讀取這些檔案,而不需要進行記憶體複製,也不需要記憶體管理單位,以建立檔案的記憶體對應檢視。

我們建議開發人員在多個裝置上測試應用程式,以了解在效能的裝置特定變異。

RAM 儲存區

隨機存取記憶體 (RAM) 是用來儲存動態資料結構和 JIT 編譯的程式碼。.NET Compact Framework 會使用可用的 RAM,直到裝置所指定的上限為止,以快取所產生的程式碼和資料結構,然後在適當時間釋放記憶體。

在記憶體不足時,Common Language Runtime 會使用程式碼字幅 (Code Pitching) 技術,在執行階段釋放 JIT 編譯的程式碼區塊。這能在最小的效能負面影響下,讓較大的程式在限制 RAM 之系統上執行。

ROM 儲存區

形成 Common Language Runtime 的機器碼可以位於唯讀記憶體 (ROM) 或 RAM 檔案系統中。.NET Compact Framework 使用可用的 ROM、快閃記憶體或磁碟儲存區,讓應用程式在記憶體不足的狀況下,以較低的效能繼續執行。

包含 Microsoft Intermediate Language (MSIL) 指令和類別庫 (Class Library) 中繼資料的檔案,儲存在 ROM 或 RAM 檔案系統中。類別庫可以下載至讀取/寫入檔案系統,做為可下載應用程式安裝程序的一部分。

請參閱

工作

HOW TO:改善效能

概念

自動記憶體管理

其他資源

.NET Compact Framework 架構概觀