2014-11-03 4 views
-4

1 백만 개가 넘는 항목을 반복해야하고 다음 액션은 1 백만 개 항목에 대한 성공적인 반복에 따라 달라집니다. 현재 C#의 While 루프를 사용하고 있습니다. 반복을 완료하는 데 5-6 분 정도 소요됩니다. 이 처리 속도를 높이는 방법이 있습니까? 나중에 반복 할 항목이 약 5 ~ 6 백만 개가 될 수 있습니다. 당신이 경우C에서 루프를 어떻게 가속화 할 수 있습니까?

 System.IO.StreamReader file = 
      new System.IO.StreamReader("data.csv"); 
     System.IO.StreamWriter jsonFile = 
      new System.IO.StreamWriter("jsonData.csv"); 
     BBP obj; 
     var dataList = new Dictionary<string, dynamic>(); 
     while ((line = file.ReadLine()) != null) 
     { 
      if (counter == 0) 
      { 
       columns = line.Split(','); 
      } 
      else 
      { 
       data = line.Split(','); 

       obj = new BBP(); 
       obj.BBP_CR_PART_NO = data[0]; 
       obj.BBP_RO_NO = data[1]; 
       obj.BBP_BPR_TPN = data[2]; 
       dataList.Add("item_" + counter, obj); 
       Console.WriteLine(counter); 
      } 
      counter++; 
     } 
+1

이 질문은 너무 모호하고 추측입니다. 루프 자체는 본질적으로 느리지 않습니다. 1 백만 번의 반복 작업은 현대 하드웨어의 경우 1 초도 안 걸립니다. 하지만 느린 코드는 게시하지 않으므로 누구나 코멘트 할 방법이 없습니다. http://stackoverflow.com/help/mcve –

+0

'Parallel.For'를 사용해보십시오. – Shaharyar

+0

우편 번호가 맞지 않거나 도움을받을 수 없습니다. 어떻게 사용하고 있습니까? 그냥 컬렉션을 반복하는 경우 foreach를 사용하여, 느린 부분이 반복이 아니라 당신이 거기에서 무엇을하고 있는지를 확신 할 수있다. –

답변

0

당신은 일을 속도를 수 :

  1. 는 다음 if (counter == 0) 체크를 제거 루프 외부의 첫 줄을 읽습니다. 이것은 모든 행에 대해 처리되고 있으며 값은 한 번만 있습니다.
  2. dataListList<BBP>으로 변경하십시오. 이렇게하면 항목을 추가 할 때 키를 지정할 필요가 없으며 (문자열 연결에 비용이 적음) 나중에 참조 할 수있는 색인이 있습니다 (해당 색인이 작동하는 경우).
  3. 카운터 증가분을 제거하십시오 (이 시점에서 카운터는 모두 제거하십시오).
  4. 콘솔 출력을 제거하십시오. , Read and process files in parallel C#

    당신이 당신의 파일을 분할 할 수없는 경우 :

또한, 여러 개의 파일로 파일을 깨는 고려하고 당신은이 질문에 대한 대답처럼, 멀티 스레드 솔루션을 구현할 수 있습니다 당신은 라인 덩어리 (아마도 한 번에 1000 개)를 List<string>으로 읽어 들이고, 그 목록을 처리를 위해 Task에 보냅니다. 이 방법을 사용하면 1000 줄을 읽은 다음 작업으로 보내고 작업은 다음 1000 줄을 읽는 중입니다.이 예를 확인하십시오. http://msdn.microsoft.com/en-us/library/jj155756.aspx

마지막으로 데이터를 대신 데이터베이스에 저장하는 것이 좋습니다. CSV 파일.

+0

Rufus, 사실 이것이 요구 사항이었습니다. 파일에서 읽고 객체를 만들었습니다. 귀하의 의견을 반영 할 것입니다. 그러나 일반적으로이 코드 루프의 속도를 높이는 방법이 있습니까? –

+0

@MohitVaidh 예, 처음 네 개의 댓글과 작업 ...을 사용하는 재 설계 옵션은 무엇입니까? –

+0

확실한 Rufus, Tasks에 관해서, 나는 그것에 좋지 않다.작업 부분으로 무엇을 옮길 지 생각해 주시겠습니까? –

관련 문제