【发布时间】:2013-01-27 19:15:31
【问题描述】:
问题是关于 .net 中数组的分配。我在下面有一个示例程序,其中我可以获得的最大数组是长度。我将长度增加到 +1,它给出了 outofMemory 异常。但是如果我保持长度并删除 cmets,我可以分配 2 个不同的大数组。两个数组都小于 .net 允许的 2 GB 对象大小,总内存也小于虚拟内存。有人可以提出任何想法吗?
class Program
{
static int length = 203423225;
static double[] d = new double[length];
//static int[] i = new int[15000000];
static void Main(string[] args)
{
Console.WriteLine((sizeof(double)*(double)length)/(1024*1024));
Console.WriteLine(d.Length);
//Console.WriteLine(i.Length);
Console.WriteLine(Process.GetCurrentProcess().VirtualMemorySize64.ToString());
}
}
【问题讨论】:
-
您期待什么?最大数组大小取决于系统条件,并且您不断更改条件。
-
如果它是为 32 位编译的,在 .NET 中你往往会出现 1.2-1.6GB 左右的内存不足错误;看到您正在创建大约 1.55GB 的双打,这并不奇怪。有关更多信息,请参阅:stackoverflow.com/questions/1087982/…
-
您正在尝试分配更多内存,然后才被允许。一个整数是 32 位的,但您正在查看 64 位虚拟内存大小,您的代码没有意义。
-
那么您是否正在尝试解决现实世界的问题,或者您只是对内存管理感到好奇?两者都可以 - 只是好奇这里是否有更多上下文。
标签: c# .net gcallowverylargeobjects