|
1
18
拥有巨大的内存块从来都不是一个好主意,即使是64位。连续内存和碎片会带来很大的问题。 这里的问题是找到一个连续的块。您可以尝试启用3gb模式(这可能有助于它找到更多字节),但我 真的 建议不要这样做。答案如下:
您可能还想阅读 Eric Lippert's |
|
|
3
4
我最近一直在围绕内存限制进行广泛的分析。NET在32位进程上运行。我们都会被这样一个想法轰炸,即我们可以在一个内存中分配高达2.4GB(2^31)的内存。NET应用程序,但不幸的是,事实并非如此:(.应用程序进程有那么多的空间可供使用,操作系统在为我们管理它方面做得很好,然而,.NET本身似乎有自己的开销,对于推动内存限制的典型实际应用程序来说,这大约占600-800MB。这意味着,一旦你分配了一个大约1.4GB的整数数组,你应该会看到OutOfMemoryException()。
我希望这个见解能有所帮助。 我最初在这里回答了一些相关的问题(我还是新手,所以不知道该怎么做这些链接): |
|
|
4
0
通过将应用程序构建为64位体系结构,您可以分配比2 GB更多的内存,这需要您在Visual Studio中创建新的构建配置,并且应用程序的构建只能在64位版本的Windows上运行。在。NET,使用应用程序的默认“Any CPU”构建选项,我发现我只能从堆中分配大约1.5 GB的内存(即使在64位Windows机器上),这是因为当应用程序在“Any CPU”模式下构建时,它实际上只在32位模式下运行。但是通过编译到x64架构,您可以在应用程序执行期间从堆中分配更多的内存,我将在下面解释如何为您的应用程序创建x64版本:
在64位Windows操作系统上使用64位版本的应用程序将允许您的程序分配超过约2GB的内存,可能高达2^64个地址空间(如果您有可用的RAM和磁盘空间,这是截至编写此响应时的真正限制因素)。 如果应用程序中的内存仍然不足,您还可以增加Windows内存页文件的大小。在Windows上,如果RAM内存空间不足,页面文件允许操作系统将内存从RAM转移到磁盘。但是,在磁盘之间来回移动RAM内存部分需要花费大量时间,因此这可能会对应用程序的性能产生真正的影响。无论性能如何,通过增加页面大小,您可以(理论上)使页面文件与windows计算机C:驱动器上的可用空间一样大。在这种情况下,您的应用程序将能够在程序执行期间分配高达4TB的内存(或页面文件大小设置的任何内存量)。要更改Windows计算机的页面文件设置,请执行以下操作:
不管怎样,我希望这能帮助人们理解为什么他们在一个应用程序中会遇到1.5-2GB的内存限制问题。NET应用程序,即使在64位Windows计算机上运行。这对人们来说可能是一个非常令人困惑的问题,我希望我的解释有意义。如果需要,请随时给我发消息,询问有关此答案的问题。 |
|
|
5
0
将程序编译为
|
|
|
6
-1
|
|
|
7
-2
http://msdn.microsoft.com/en-us/library/yh598w02(v=vs.80).aspx |