我们目前正在考虑构建一个缓存系统来保存从SQL数据库中提取的数据,并使其可用于其他几个应用程序(网站,Web服务等).我们想象缓存作为Windows服务运行,基本上由一个保存缓存条目的智能字典组成.我的问题是,应用程序的工作集是否有限制(它将在Windows Server 2003下运行)?或者是物理内存量的限制?
32位还是64位?32位是2gb(对于进程),64位是1TB(企业版2003服务器).
但是,即使在64位上,CLR对象的最大大小也是2gb.
更新:上述信息在2008年是正确的.有关最新信息,请参阅Ohad的答案.Windows 2016服务器最多可以有24TB.
我最近在32位进程上对.NET中的内存限制进行了大量的分析.我们都被一个.NET应用程序中可以分配高达2.4GB(2 ^ 31)的想法所震撼,但不幸的是,这不是真的:(.应用程序进程有很大的空间可供使用,操作系统也很棒但是,.NET本身似乎有自己的开销,对于推动内存限制的典型实际应用程序来说,它本身就有大约600-800MB的占用空间.这意味着只要你分配一个整数数组就可以了1.4GB,你应该期望看到一个OutOfMemoryException().
显然在64位,这个限制发生的方式稍晚(让我们在5年内聊聊:)),但由于字数增加,内存中所有内容的一般大小也会增长(我发现它是~1.7到2倍).
我所知道的是,操作系统中的虚拟内存理念绝对不能在一个进程中为您提供几乎无限的分配空间.只有这样才能使完整的2.4GB可以同时运行所有(许多)应用程序.
MSDN的下表是您查询的最精确答案.请注意,IMAGE_FILE_LARGE_ADDRESS_AWARE标志不能直接从托管编译器设置,但幸运的是它可以通过editbin实用程序在后期构建时设置.4GT指的是/ 3gb标志.