尽管应用程序可以在注册表中存储的数据类型和大小存在一些技术限制,但存在促进系统效率的某些实际准则。 应用程序应在注册表中存储配置和初始化数据,并在其他位置存储其他类型的数据。
通常,由一到两千字节(K)组成的数据应存储为文件,并使用注册表中的键而不是作为值存储来引用。 应用程序应将数据另存为文件并引用文件,而不是复制注册表中的大块数据。 可执行文件二进制代码不应存储在注册表中。
值项使用的注册表空间比键少得多。 为了节省空间,应用程序应将类似数据组合在一起作为结构,并将结构存储为值,而不是将每个结构成员存储为单独的键。 (以二进制形式存储数据允许应用程序将数据存储在一个值中,否则由多种不兼容类型组成)。
注册表文件的视图在分页池内存中映射。
Windows Server 2008 for 32 位、Windows Vista SP1(适用于 32 位、Windows Vista、Windows Server 2003、Windows XP: 注册表文件的视图)映射到计算机缓存地址空间中。 因此,无论注册表数据的大小如何,它都不会收费超过 4 兆字节(MB)。
注册表配置单元的最大大小为 2 GB,系统配置单元除外。
Windows Server 2003 SP1、Windows Server 2003 和 Windows XP: 分页池内存和磁盘空间中的 hives 可能占用的总空间量没有显式限制,尽管系统配额可能会影响实际的最大大小。 注册表配置单元的最大大小限制为 2 GB,从 Windows Server 2003 Service Pack 2 (SP2) 开始。
系统配置单元的最大大小受物理内存的限制,如下表所示。
系统 | 系统配置单元的最大大小 |
---|---|
基于 x86 的系统 | 50% 的物理内存,最大为 400 MB。SP2、Windows Server 2003 SP1、Windows Server 2003 和 Windows XP 的 Windows Server 2003: 25% 的物理内存,最大为 200 MB。 |
基于 x64 的系统 | 50% 的物理内存,最高为 1.5 GB。使用 SP2Windows Server 2003: 25% 的系统内存,最大为 200 MB。 使用 SP1、Windows Server 2003 和 Windows XP 64 位版本 Windows Server 2003: 32 MB。 |
基于 Intel Itanium 的系统 | 50% 的物理内存,最大为 1 GB。Windows Server 2008、Windows Vista、Windows Server 2003 SP2、Windows Server 2003 SP1、Windows Server 2003 和 Windows XP 64 位版本: 32 MB。 |
Windows 2000
注册表数据存储在分页池中,这是用于系统数据的物理内存区域,在不使用时可以写入磁盘。 RegistrySizeLimit 值可建立所有应用程序的注册表数据可以使用的最大分页池量。 此值位于以下注册表项中:
HKEY_LOCAL_MACHINE
System
CurrentControlSet
Control
默认情况下,注册表大小限制为分页池的 25%。 (分页池的默认大小为 32 MB,因此为 8 MB。系统确保 RegistrySizeLimit 的最小值为 4 MB,最大值为 PagedPoolSize 值的大约 80%。 如果此项的值大于分页池大小的 80%,则系统将注册表的最大大小设置为分页池大小的 80%。 这可以防止注册表占用进程所需的空间。 请注意,设置此值不会在分页池中分配空间,也不会确保空间在需要时可用。
分页池大小由以下注册表项中的 PagedPoolSize 值决定:
HKEY_LOCAL_MACHINE
System
CurrentControlSet
Control
SessionManager
MemoryManagement
有关如何确定注册表的当前大小和最大大小的示例,请参阅 确定注册表大小。
最大分页池约为 300,470 MB,因此注册表大小限制为 240-376 MB。 但是,如果使用 /3GB 交换机,则最大分页池大小为 192 MB,因此注册表最大可以为 153.6 MB。