5

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

我预计以下行将使用大约 6 亿字节。MemoryStream 类是否使用比初始化容量更多的内存?

MemoryStream memory = new MemoryStream(600000000);
4

2 回答 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

于 2012-11-14T19:07:15.107 回答
0

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

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

自动内存管理 (MSDN)

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

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

于 2012-11-14T19:24:22.687 回答