我们目前正在考虑建立一个高速缓冲系统,以保持数据拉脱SQL数据库,并提供给一对夫妇的其他应用程序(网站、网络服务等)。我们想象一下高速缓冲运行为windows服务和基本上包括一个聪明的字典持有缓项目。我的问题是,是否有限制的工作设置的应用程序(这将是下运行的windows服务器2003年)?或是量的物理存储器的限制吗?

有帮助吗?

解决方案

32位还是64位? 32位是2gb(对于一个进程),64位是 1TB(企业版2003服务器)

但是,CLR对象的最大大小为2gb 即使是64位。

更新:上述信息在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标志。

在32位Windows上,您可以通过使用/ 3gb标记启动Windows并将您的应用标记为“大地址识别”来获得更多内存

的Matthias,

实际上并不是直接问题的答案,而是解决这个问题的另一种方法,它可以解决一些重大陷阱,这可能是缓存解决方案的一个主要问题。 (对不起,我没有任何关于此事的推荐阅读。)

我们在之前的项目中实现了这一点,并确实产生了其他问题。

对于离线访问,您是否可以在桌面上使用sql express来创建数据库的镜像(或者只需要缓存的位)?然后,您需要做的就是切换应用程序指向的数据库。您甚至可以使用它存储差异并将这些差异重播到服务器 - 尽管这有其他问题。您可以更改本地副本的权限,以使其成为只读版本。

您正在考虑创建声音的词典非常类似于Sql索引。如果您能够以这种方式构建它,我会依赖sql来为您完成这项工作。为什么重新发明那个轮子?如果这样做,您将不得不仔细考虑缓存过期和内存管理 - 特别是如果这是一个Windows服务。

祝你好运,

萨姆

如同任何其他窗口程序的,你是有限的地址空间。这是:在32位,可以有2GB的地址空间。在64,你可以有8TB.

如果你没有8TB的物理存储器,它将开始页。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top