解决方案 »

  1.   

    楼主看看这个回答。http://stackoverflow.com/questions/5791868/large-array-c-sharp-outofmemoryexception
      

  2.   

    用多个数组,或者用交错数组。C#不支持超过21亿(2^31)个元素的数组,这是因为,C#通过int去访问下标,而int最大只能表示这么多。
      

  3.   

    目前(包括4.0)有单个CLR对象不能超过2G的限制,而单个double[,] a已经超过这个限制了。
    见SpankyJ得博客:http://blogs.msdn.com/b/joshwil/archive/2005/08/10/450202.aspx你可能可以用double[][]。
    或者,用MemoeryMappingFile(建议用法)。
      

  4.   

    double[ ][ ] a=new double[20000][ ];
    for(int i=0;i<20000;i++)
    {
    a[i]=new double[20000];
    }
    循环到10000多次就内存溢出了
      

  5.   


    我机器上的测试没有问题。
    其实,这么大的内存,实际使用的可能只是其中的一小部分。
    这种情况可以用稀疏的数据结构。利用MemoeryMappingFile的页面机制,可以非常有效的处理超大数组。
      

  6.   

    .Net  必然是支持大数组。但是数组分配的空间必须是连续的。也许机器有很多空闲的内存,但是未必有足够的连续的空闲内存。
    所以就出 OutOfMemoryException 了。
      

  7.   

    感谢大家的回答,后来我找到原因所在了,我的vs的活动解决方案平台还是x86的,所以没法开辟2G以上的数组。
    把平台改成x64的,再配合<gcAllowVeryLargeObjects>,就可以开超过2G的数组了