2017-01-25 19 views
2

私はC#を初めて使用し、地震データを含む.sgyファイルを読み込もうとしています。私はUnplugged.SEGYとして知られているライブラリを見つけました。私のファイルは4.12Gbです。「mscorlib.dllで 'System.OutOfMemoryException'が発生しました」という最初の機会例外が発生し、プログラムが突然停止します。私はmscorlib.dllで 'System.OutOfMemoryException'タイプの最初のチャンス例外が発生しました

+0

私はあなたがすでにx64を実行しているので、あなたはすでにファイルをロードしたり、まともな量のRAMを取得する必要があるので、ライブラリの作者に依頼する必要があります(16GBから始める必要があります。そのようなデータ量で作業してください)。 –

答えて

2

は、単一のオブジェクトのインスタンスを扱うことができない64ビット32とビットとして、アプリケーションの実行を作ってみましょう64ビットプロセスとしてアプリケーションを実行しています:これは私のコード

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); 
     } 
    } 
} 

EDIT私を助けてくださいですメモリが2GBを超える場合。

+1

間違っています。 32bitプロセスの場合、メモリの総量(単一オブジェクトではない)は2GBより大きいことはありません。単一オブジェクトの場合、両方のアーキテクチャで最大サイズは2GBです。 64bitプロセスでは最大許容メモリは1tb、http://stackoverflow.com/questions/200348/is-there-a-memory-limit-for-a-single-net-process –

+0

@ M.kazemAkhgary 32bitプロセスは使い尽くす可能性がありますx64マシンでは4GBまでです。(そうでないと、この回答がきわめて誤解を招くことがあります) –

+0

64ビットで実行しようとしましたが、出力が得られず、代わりにPCがハングアップしています。あなたはコードを見て、何か間違っているかどうか教えていただけますか?また、Windows 8で4Gb RAM 64ビットOSを使用しているこのアプリケーションを実行している場合。 –

関連する問題