由于科学计算需要,程序中需要调用2个超大规模的矩阵(70000*70000),但是在vs里超过16000*16000的数组,比如double[,] m = new double[16000, 16000];就报System.OutOfMemoryException异常。原先以为是运行环境的问题,但是更新硬件和软件后也报同样的错误。编译环境:vs2010   x64
操作系统:server2008 R2 x64
内存:16G基本要求:由于程序已经用c#开发了好几年了,再改换别的语言工作量太大了,只能用c#。急求解决方案,望各位牛人不吝赐教。

解决方案 »

  1.   

    http://social.msdn.microsoft.com/Forums/en-US/netfx64bit/thread/1a12abaa-50bd-4d28-b3c1-9de06a1488e9
    这里讨论了一个创建超过2G的数组。看是否对你有帮助。
      

  2.   

    可以把数据放到一个磁盘文件中,操作文件流double GetItem(int row,int col)
    {
        int position=row*70000+col;
        stream.Seek(position,SeekOrigin.Begin);
        byte buffer=new byte[8];
        stream.Read(buffer,0,8);
        return BitConverter.ToDouble(buffer,0);
    }
      

  3.   

    我不知道如何解,但是想说的是System.OutOfMemoryException错误产生的原因不一定就是内存不够。一些其他的限制也可能产生这一类错误。不要忘物理内存不足上想。
      

  4.   

    那可以按数据块分别放到不同的内存流中(MemoryStream),读取时先根据索引去推断是哪块内存流保存该数据的位置,然后从该块内存流内读取并返回不太清楚64位的.Net程序每个进程可以管理的内存泛围有多大.如果进程的最大内存无法满足你的要求的化,要么换其他语言,要么用磁盘文件.