【发布时间】:2010-01-12 18:05:20
【问题描述】:
我在我的 c# 应用程序中使用 Hashtable。我正在加载数百万个密钥,但在应用程序超过 3.7GB 的 RAM 后,它会给我一个“内存不足”异常。
我使用 x64 操作系统,计算机有 16GB 内存。我在想也许这可能是 x86 的限制。我将构建类型更改为 x64,但仍然出现错误。
.net 中的对象是否有最大内存大小?我可以做些什么来使用所有的内存吗?
谢谢, 安德鲁
【问题讨论】:
-
对于这种大小的数据集,您可能需要使用一些基于磁盘(或部分基于磁盘)的解决方案。将这么多数据加载到内存中并不是很好的业力。看看 BerkeleyDB,它有 .NET 绑定并且是免费的。
-
RAM 无关; RAM 只是一个缓存,可以加快内存访问速度。相关的稀缺资源是可用的地址空间。
-
Eric Lippert:我不知道您是否评论了这个问题或我的评论,但我的意思是(除了有限的地址空间)从磁盘(特别是因为/如果它被分页)。
-
对;我的意思是,一个以“我的内存不足但我有足够的 RAM”开头的问题表明了对实际用完的内容的误解。您可以拥有 256 兆的 RAM,但仍然有 20 个程序,每个程序使用 500 兆的地址空间;机器会很慢,但你不会用完地址空间。您可以拥有 14 GB 的空 RAM,但仍然会用完地址空间。 RAM 的大小与地址空间不足的问题完全无关;它只与性能有关。