类型为System.OutOfMemoryException'的第一次机会异常。发生在mscorlib.dll中

时间:2017-01-25 05:54:52

标签: c#

我是C#的新手并试图读取包含地震数据的.sgy文件。我找到了一个名为Unplugged.SEGY的库来读取文件。我的文件是4.12Gb,我得到了#34;类型为System.OutOfMemoryException'的第一次机会异常。发生在mscorlib.dll"然后程序突然停止。这是我的代码

using System;   
using Unplugged.Segy;  
namespace ABC   
{  
    class abc       
    {  
        static void Main(String[] args)  
        {      
            var reader = new SegyReader();  
            ISegyFile line = reader.Read(@"D:\Major\Seismic.sgy");   
            ITrace trace = line.Traces[0];   
            double mean = 0;   
            double max = double.MinValue;   
            double min = double.MaxValue;    
            foreach (var sampleValue in trace.Values)   
            {    
                mean += sampleValue / trace.Values.Count;   
                if (sampleValue < min) min = sampleValue;   
                if (sampleValue > max) max = sampleValue;   
            }  
            Console.WriteLine(mean);  
            Console.WriteLine(min);  
            Console.WriteLine(max);  
        }  
    }  
}  

请帮帮我 编辑:我正在以64位进程运行应用程序

1 个答案:

答案 0 :(得分:2)

由于您运行的是64位(并且只要您在.NET 4.5+中运行),我建议确保将gcAllowVeryLargeObjects标志设置为true。

在.NET中,可以在32位应用程序中使用各种大小,每个进程可以容纳2-4 GB。 64位应用程序每个进程可以消耗更多。

然而;在32位和64位中,单个对象最多只能消耗2GB。

然而;再次敲定最终语句,从4.5及更高版本开始,您可以标记您的配置以允许大于2GB的对象。

我最后的想法是需要在你的情况下设置标志。

要使.NET进程大于4GB,它必须是64位进程。 要使单个对象大于2GB,它必须是64位进程,运行.NET 4.5或更高版本,并且gcAllowVeryLargeObjects标志设置为true