簡體   English   中英

mscorlib.dll 中發生了“System.OutOfMemoryException”類型的第一次機會異常

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM