2012-11-14 108 views
4

我有一個2 GB的機器。在運行我的exe之前,我有1.1 GB的可用內存。當我運行只有一行的exe文件時,你可以在下面找到這個exe文件,這樣我就會發現內存異常。MemoryStream使用多少內存?

我期待以下行使用約600萬字節的東西。 MemoryStream類是否使用比初始容量更多的內存?

MemoryStream memory = new MemoryStream(600000000); 

回答

4

按照以下是問答& 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

+0

,此外,我敢打賭,你任何東西OP正在運行32位系統。 – Blindy

+0

我懷疑同樣的事情,但無法拿出任何文件來支持我的說法。 – JDB

+0

看起來好像它是關於視覺工作室的限制的東西,正如您在論壇中指出的那樣,因爲當我在Visual Studio外運行exe時,即使將容量設置爲15億,也不會出現錯誤。 – Efe

0

我找到了文檔備份@SethFlowers建議(應用程序無法找到的內存足夠大的連續塊):

當您初始化一個新進程時,運行時會爲進程保留一個連續的地址空間區域。這個保留的地址空間被稱爲託管堆。

Automatic Memory Management (MSDN)

這裏的.NET內存使用一些額外的解釋,以及如何配置您的應用程序的內存使用情況:

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