2016-11-14 29 views
0

C#を使用するテキストファイルのデータを2Dリストに読み込んで処理します。各ファイルは256の倍数で、スペースは256行で区切られ、各行は倍精度のリストに読み込まれ、各リストは行のリストに追加されます。すべてのファイルのデータポイントは256x256 = 65,536です。テキストファイルからダブルデータを読み取る - 読み込み時間の違い

私はファイルを読み込んでいくつかのファイルでうまく動作するコードを持っていますが、他の人は実際にはかなり長い時間がかかります。すべてのファイルは同じ方法でフォーマットされているので、読み込み時間の違いを理解していない同じ数のデータポイントを含んでいるので、いずれかのアイディアがありますか?

ファイル2の読み取り時間を短縮するにはどうすればよいですか?ここで

私が使用しているコードです:

 private Data ReadData (string name, string file) 
     { 
      List<List<Double>> data_points = new List<List<Double>>(); 

      String input = File.ReadAllText(file); 

      foreach (string row in input.Split('\n')) 
      { 
       List<Double> line_list = new List<double>(); 
       foreach (string col in row.Trim().Split(' ')) 
       { 
        if(row != "") 
        { 
        line_list.Add(double.Parse(col.Trim())); 
        } 

       } 
       if(line_list.Count > 1) 
       { 
       data_points.Add(line_list); 
       } 
      } 

      Data temp_data = new Data(name, data_points); 
      return temp_data; 
     } 

例のテキストファイルはここにある:

https://www.dropbox.com/s/diindi2qjlgoxep/FOV2_t1.txt?dl=0 =>は、高速

https://www.dropbox.com/s/4xrgdz0nq24ypz8/FOV2_t2.txt?dl=0 =>が答えでは遅い

を読み込みを読み込みいくつかのコメントに: @AntDC - 有効なダブルを構成するものは何ですか? Parse.DoubleをConvert.ToDoubleで置き換えようとしましたが、改善はありませんでした。

@Henk Holterman - 読み込み時間の差は非常に目立ちます<最初のファイルは約1秒です。 2番目のファイルは50です。繰り返すことができるようです。

@Slai - 両方のファイルを別の場所に移動しても、読み込み時間に影響はありませんでした。両方のファイルは同じプログラムから数秒以内にエクスポートされました。

+0

有効な値はすべて倍数ですか? Double.Parseは無効なダブルスのために遅くなることがあります。 – AntDC

+0

「本当に長い時間」を指定します。他の場合について。これは繰り返し可能ですか? GCとI/Oアーチファクトをなくすために何をしましたか? –

+0

は、ファイルがフラグメント化されているように見えます。つまり、ファイルは1つの連続領域ではなく、ハードディスクの複数の部分に分散されています。ディスクデフラグツールを実行するか、ファイルを新しい場所にコピーすることができます。 – Slai

答えて

2

パフォーマンスを向上させるには、ファイル全体を読み込み、その後にコードを最適化することができます。一行ずつ読むだけです。

List<Double> line_list = new List<double>(); 
foreach (string line in File.ReadLines("c:\\file.txt")) 
{ 
    string[] rows = line.Trim().Split(' '); 

    foreach(string el in rows) 
    { 
     line_list.Add(double.Parse(el.Trim())); 
    } 
} 
+0

ありがとうございましたクラスのコンストラクタですが、この変更を実装してパフォーマンスを向上させました。 –

+0

@ MCrozier助けてくれれば答えを受け入れることができます。 – mybirthname

関連する問題