.NET Compact Framework 中的设备内存管理

更新:2007 年 11 月

.NET Compact Framework 的一个重要功能是高效利用资源,尤其是易失性 RAM。设备不必有硬件内存管理单元 (MMU) 或操作系统虚拟内存。

.NET Compact Framework 的存储大小

对于 .NET Compact Framework 3.5 版,请参见描述 CAB 文件安装的部分。.NET Compact Framework 3.5 版在 ROM 中尚不可用。

对于 .NET Compact Framework 2.0 版,存储大小如下: 

  • 在 Windows Mobile 5.0 上为 5.5 MB (ROM)(未压缩)。
说明:

使用 Windows Mobile 5.0 启动时,不再压缩永久性存储。

对于 .NET Compact Framework 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 2.0 版 Service Pack 1 及更高版本的安装过程中,会提示您安装到设备或存储卡(如果存在)。如果选择安装到存储区,则全局程序集缓存将放置到存储卡上,并且公共语言运行库 (CLR) 的文件将放置在 \Windows 目录中。在 .NET Compact Framework 3.5 版中,全局程序集缓存需要约 5.2 MB 的空间,而 CLR 需要 1.3 MB。

对于 CAB 文件安装,.NET Compact Framework 的性能因硬件和软件中的内存实现而异。对于一些设备,将全局程序集缓存安装到存储卡能够实现更好的性能。

内存使用

.NET Compact Framework 最适于在具有以下特性的系统上运行:

  • 由电池供电。

  • 在动态 RAM (DRAM) 中存储 .NET Compact Framework 及其应用程序的空间是闪存或 RAM 文件系统容量的大约 5 到 10 倍。 

  • 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 中间语言 (MSIL) 指令和类库元数据的文件存储在 ROM 文件系统或 RAM 文件系统中。类库可以作为可下载应用程序安装过程的一部分下载到读/写文件系统中。

请参见

任务

如何:提高性能

概念

自动内存管理

其他资源

.NET Compact Framework 体系结构概述