我有一台2 GB的机器。在运行我的exe之前,我有1.1 GB的可用内存。当我运行下面只能找到一行的exe时,我就会出现内存异常。
我期待以下行使用大约6亿字节的内容。 MemoryStream类使用的内存多于初始化容量吗?
MemoryStream memory = new MemoryStream(600000000);
答案 0 :(得分:5)
根据以下Q& A,可能是因为您的EXE无法分配600兆的连续内存。 (我试图在文档中找到一些东西,这是我能在短时间内得到的最好的东西。)
“内存不足”错误几乎从未发生,因为没有 足够的存储空间;正如我们所见,存储是磁盘空间,而且 这些天磁盘很大。相反,会发生“内存不足”错误 因为这个过程无法找到足够大的部分 在其虚拟地址空间中连续的未使用页面来执行此操作 请求映射。“
有趣的是,该答案与Eric Lippert's博客文章有关: http://blogs.msdn.com/b/ericlippert/archive/2009/06/08/out-of-memory-does-not-refer-to-physical-memory.aspx
答案 1 :(得分:0)
我找到了备份@SethFlowers建议的文档(该应用程序无法找到足够大的连续内存块):
初始化新进程时,运行时会为进程保留一个连续的地址空间区域。此保留的地址空间称为托管堆。
以下是对.NET内存使用情况的一些补充说明,以及如何分析应用程序的内存使用情况: