c# - mscorlib.dll 中发生了类型 'System.OutOfMemoryException' 的第一次机会异常

标签 c#

我是 C# 新手,正在尝试读取包含地震数据的 .sgy 文件。我找到了一个名为 Unplugged.SEGY 的库来读取该文件。我的文件大小为 4.12Gb,我收到“mscorlib.dll 中发生了类型为‘System.OutOfMemoryException’的第一次机会异常”,然后程序突然停止。这是我的代码

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 位进程运行

最佳答案

由于您运行的是 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

关于c# - mscorlib.dll 中发生了类型 'System.OutOfMemoryException' 的第一次机会异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41844388/

相关文章:

c# - 在服务器端( Controller )进行验证是一种好习惯吗? ASP.NET MVC

c# - ItextSharp - 使用 C# 自动填写 pdf 表单 - 复选框问题

c# - 如何通过继承向类添加属性,然后将基类转换为新类?

c# - ArraySegment<T> 类有什么用?

c# - 当第一个项目存在实体验证错误时,保存项目列表时出错

c# - 在 SignalR 中传递强类型集线器

c# - 显示 DevExpress 网格单元的工具提示

c# - MEF 递归插件搜索

c# - 将日文字符写入表中

c# - 在 Web 上预览 TIF 文档 (.Net C#)