Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 类型为'的首次机会例外;System.OutOfMemoryException';发生在mscorlib.dll中_C# - Fatal编程技术网

C# 类型为'的首次机会例外;System.OutOfMemoryException';发生在mscorlib.dll中

C# 类型为'的首次机会例外;System.OutOfMemoryException';发生在mscorlib.dll中,c#,C#,我对C#不熟悉,正在尝试读取包含地震数据的.sgy文件。我找到了一个名为plugged.SEGY的库来读取该文件。我的文件是4.12Gb,我得到“mscorlib.dll中发生了'System.OutOfMemoryException'类型的第一次意外异常”,然后程序突然停止。这是我的密码 using System; using Unplugged.Segy; namespace ABC { class abc { stati

我对C#不熟悉,正在尝试读取包含地震数据的.sgy文件。我找到了一个名为plugged.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);  
        }  
    }  
}  
使用系统;
使用不插电的.Segy;
名称空间ABC
{  
abc班
{  
静态void Main(字符串[]参数)
{      
var reader=new SegyReader();
ISegyFile line=reader.Read(@“D:\Major\Seismic.sgy”);
ITrace trace=line.Traces[0];
双平均值=0;
最大值加倍=最小值加倍;
double min=double.MaxValue;
foreach(trace.Values中的var sampleValue)
{    
平均值+=采样值/trace.Values.Count;
如果(采样值<最小值)最小值=采样值;
如果(采样值>最大值)最大值=采样值;
}  
控制台写入线(平均值);
控制台写入线(最小值);
控制台写入线(最大值);
}  
}  
}  
请帮帮我
编辑:我将应用程序作为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

错误。对于32位进程,内存总量(不适用于单个对象)不能大于2gb。对于单个对象,两种体系结构上的最大大小均为2gb。64位进程上允许的最大内存为1tb,@M.kazemAkhgary 32位进程在x64机器上最多可使用4GB。。。(另外一个很好的观点是这个答案充其量是非常误导的)我试着以64位运行它,但它没有给我任何输出,相反,我的电脑被挂断了。你能检查一下代码,让我知道这里面有什么错误吗?另外,仅供参考,我正在Windows 8上使用4Gb RAM 64位操作系统运行此应用程序。Michael PuckettII-请避免在帖子讨论中添加不相关的文本-为什么对帖子进行编辑对解决问题毫无价值。旁注:编辑没有使文章中的信息正确,也没有使答案看起来像答案。。。如果您不确定(“尝试此…”)-请将其作为注释发布。您是否尝试在内存超过4GB的计算机上运行此功能?我认为您无法在此处获得更多帮助-您已经运行了x64,因此您需要询问库作者有关加载部分文件的事宜,或者获得相当数量的内存(如果您需要处理如此大量的数据,我会从16gb开始)。。