MemoryStream使用多少内存?

时间:2012-11-14 18:58:42

标签: .net memorystream

我有一台2 GB的机器。在运行我的exe之前,我有1.1 GB的可用内存。当我运行下面只能找到一行的exe时,我就会出现内存异常。

我期待以下行使用大约6亿字节的内容。 MemoryStream类使用的内存多于初始化容量吗?

MemoryStream memory = new MemoryStream(600000000);

2 个答案:

答案 0 :(得分:5)

根据以下Q& A,可能是因为您的EXE无法分配600兆的连续内存。 (我试图在文档中找到一些东西,这是我能在短时间内得到的最好的东西。)

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

  

“内存不足”错误几乎从未发生,因为没有   足够的存储空间;正如我们所见,存储是磁盘空间,而且   这些天磁盘很大。相反,会发生“内存不足”错误   因为这个过程无法找到足够大的部分   在其虚拟地址空间中连续的未使用页面来执行此操作   请求映射。“

有趣的是,该答案与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建议的文档(该应用程序无法找到足够大的连续内存块):

  

初始化新进程时,运行时会为进程保留一个连续的地址空间区域。此保留的地址空间称为托管堆。

     

Automatic Memory Management (MSDN)

以下是对.NET内存使用情况的一些补充说明,以及如何分析应用程序的内存使用情况:

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