Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Windows中为进程分配超过2GB的内存?_C#_Windows_Memory_Process - Fatal编程技术网

C# 如何在Windows中为进程分配超过2GB的内存?

C# 如何在Windows中为进程分配超过2GB的内存?,c#,windows,memory,process,C#,Windows,Memory,Process,我正在运行一个构建一个非常大的对象的程序,如果为这个过程分配超过2GB的内存,我会受益匪浅。提前感谢。您不能分配大于2GB的单个对象(或数组),这是CLR限制。您必须将对象拆分为多个部分。您似乎指的是32位Windows中的2gb虚拟内存限制。在32位系统上无法绕过此限制。.NET Framework 4.5允许在64位平台上创建大于2GB的阵列。默认情况下,此功能未启用,必须使用gcAllowVeryLargeObjects元素通过配置文件启用 因此,假设我有一个3GB的对象,我将其拆分为6个

我正在运行一个构建一个非常大的对象的程序,如果为这个过程分配超过2GB的内存,我会受益匪浅。提前感谢。

您不能分配大于2GB的单个对象(或数组),这是CLR限制。您必须将对象拆分为多个部分。

您似乎指的是32位Windows中的2gb虚拟内存限制。在32位系统上无法绕过此限制。

.NET Framework 4.5允许在64位平台上创建大于2GB的阵列。默认情况下,此功能未启用,必须使用gcAllowVeryLargeObjects元素通过配置文件启用


因此,假设我有一个3GB的对象,我将其拆分为6个0.5GB的对象,这是否仍然会超过2GB进程限制?再次感谢。而且,TBH,如果您试图管理一个如此大小的对象,您需要重新思考。@Schroedingers Cat希望为某些算法分配巨大的对象是完全合理的。@Isaac Newton-当然会超过3.0GB的限制。在32位操作系统上,除非使用/3gb开关,否则无法在虚拟内存中加载超过2GB的数据。除非你能完全控制系统,否则如果你将那么多信息加载到应用程序中,那么你的设计就是有缺陷的。@David嗯,我的意思是,在一些合法的情况下,这可能是合理的-如果你的软件成本>10000美元,并且带有自己的预配置机器(想想高度专业化的工业应用程序),这可能是合理的,所以至少值得知道。但对于大多数用户来说,情况几乎肯定不是这样。尽管这可能会使您的程序更容易编写,但分配2GB+内存块肯定会导致用户的应用程序更差。如何构建2GB对象?@gabe数组是最明显的example@David当前位置我本以为OP会说如果是这样的话,可以使用boot.ini配置中的/3gb开关,并将进程标记为“大地址空间感知”"... 但无论是本机代码还是托管代码,在32位操作系统上加载2GB内存都不是一件容易的事情。@alexei机器管理员可以做到/3gb,但应用程序不能做到这一点吗?如果不需要的话,我真的不想切换到VS2012。