[英]An exception of type 'System.OutOfMemoryException' occurred in mscorlib.dll but was not handled in user code, while creating json file
[英]A first chance exception of type 'System.OutOfMemoryException' occurred in mscorlib.dll
我是 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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.