我有一個2 GB的機器。在運行我的exe之前,我有1.1 GB的可用內存。當我運行只有一行的exe文件時,你可以在下面找到這個exe文件,這樣我就會發現內存異常。MemoryStream使用多少內存?
我期待以下行使用約600萬字節的東西。 MemoryStream類是否使用比初始容量更多的內存?
MemoryStream memory = new MemoryStream(600000000);
我有一個2 GB的機器。在運行我的exe之前,我有1.1 GB的可用內存。當我運行只有一行的exe文件時,你可以在下面找到這個exe文件,這樣我就會發現內存異常。MemoryStream使用多少內存?
我期待以下行使用約600萬字節的東西。 MemoryStream類是否使用比初始容量更多的內存?
MemoryStream memory = new MemoryStream(600000000);
按照以下是問答& 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
我找到了文檔備份@SethFlowers建議(應用程序無法找到的內存足夠大的連續塊):
當您初始化一個新進程時,運行時會爲進程保留一個連續的地址空間區域。這個保留的地址空間被稱爲託管堆。
這裏的.NET內存使用一些額外的解釋,以及如何配置您的應用程序的內存使用情況:
,此外,我敢打賭,你任何東西OP正在運行32位系統。 – Blindy
我懷疑同樣的事情,但無法拿出任何文件來支持我的說法。 – JDB
看起來好像它是關於視覺工作室的限制的東西,正如您在論壇中指出的那樣,因爲當我在Visual Studio外運行exe時,即使將容量設置爲15億,也不會出現錯誤。 – Efe