MemoryStream使用多少内存?

5

我有一台2 GB的机器,在运行我的exe之前,我有1.1 GB的空闲内存。当我运行下面只有一行的exe时,我遇到了内存不足的异常。

我预计以下代码将使用大约600,000,000字节。MemoryStream类使用的内存比初始化容量多吗?

MemoryStream memory = new MemoryStream(600000000);
2个回答

5
根据以下问答,很可能是因为您的EXE无法分配600兆字节的连续内存。(我试图在文档中找到一些东西,在短时间内这是我能想到的最好的解释。)

http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/1af59645-cdef-46a9-9eb1-616661babf90

“内存不足”错误几乎从不是因为没有足够的存储空间可用,正如我们所见,存储是指磁盘空间,而现在的磁盘非常大。相反,“内存不足”错误发生是因为进程无法在其虚拟地址空间中找到足够大的连续未使用页面来执行所请求的映射。”有趣的是,该答案链接到Eric Lippert的博客文章:http://blogs.msdn.com/b/ericlippert/archive/2009/06/08/out-of-memory-does-not-refer-to-physical-memory.aspx

而且,我敢打赌,OP正在运行32位系统。 - Blindy
我也怀疑同样的事情,但无法找到任何文件来支持我的说法。 - JDB
似乎这与Visual Studio的限制有关,正如您链接的论坛所指出的那样,因为当我在Visual Studio之外运行exe时,即使将容量设置为15亿,也不会出现错误。 - Efe

0

我找到了支持@SethFlowers建议(应用程序无法找到足够大的连续内存块)的文档:

当您初始化新进程时,运行时会为该进程保留一段连续的地址空间。这个保留的地址空间称为托管堆。

自动内存管理(MSDN)

以下是有关.NET内存使用情况的其他解释以及如何分析应用程序的内存使用情况:

http://csharp.2000things.com/tag/virtual-memory/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接