2016-11-14 1 views
0

C# 사용 추가 처리를 위해 텍스트 파일의 데이터를 2D 목록으로 읽습니다. 각각의 파일은 256 개의 두 배이고, 공간은 256 줄로 구분되며, 각 줄은 double의 목록으로 읽혀지고 각 목록은 줄의 목록에 추가됩니다. 모든 파일의 데이터 포인트는 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 초입니다. 50s 두 번째 파일입니다. 그것은 반복적 인 것처럼 보입니다.

@Slai - 두 파일을 다른 위치로 옮겼으며 읽기 시간에 영향을주지 않았습니다. 두 파일은 서로 몇 초 내에 같은 프로그램에서 내 보낸 파일입니다.

+0

모든 thye 값이 두 배로 유효합니까? Double.Parse는 잘못된 double 값으로 인해 속도가 느려질 수 있습니다. – AntDC

+0

"정말 오랜 시간"을 지정하십시오. 다른 경우와 관련하여. 반복 할 수 있습니까? 어떻게 측정 했습니까? GC 및 I/O 아티팩트를 제거하기 위해 무엇을 했습니까? –

+0

은 파일이 단편화되어있어 파일이 하나의 인접한 영역 대신 하드 디스크의 여러 부분에 분산되어 있음을 의미합니다. 디스크 조각 모음을 실행하거나 파일을 새 위치로 복사 할 수 있습니다. – 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