我是C#的新手,正在尝试读取包含地震数据的.sgy文件。我找到了一个名为Unplugged.SEGY的库来读取文件。我的文件是 4.12Gb,我收到"mscorlib 中发生了类型为'System.OutOfMemoryException'的第一次机会异常.dll",然后程序突然停止。这是我的代码
using System;
using Unplugged.Segy;
namespace ABC
{
class abc
{
static void Main(String[] args)
{
var reader = new SegyReader();
ISegyFile line = reader.Read(@"D:MajorSeismic.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,它必须是运行 .NET 4.5 或更高版本的 64 位进程,并且 gcAllowVeryLargeObjects
标志设置为 true
。