2017-11-10 1 views
1

나는 아래의 코드를 실행하는 코드가 올라가고 계속 :프로세스 메모리 (MB)의

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 
    { 
     string path = txtPath.Text; 
     var workbook = new XLWorkbook(path); 
     var worksheet = workbook.Worksheet(txtWorksheet.Text); 
     var cells = worksheet.Range(txtMinRange.Text+":"+txtMaxRange.Text).Cells(); 

      foreach (var c in cells) 
      { 
       if (c.Value == "") 
       { 
        c.Value = "-"; 
       } 
       else 
       { 
        c.Value = c.Value; 
       } 

      } 

     workbook.SaveAs("RowCells.xlsx"); 
     workbook.Dispose(); 
    } 

가되어 무엇, 그것은 엑셀 대시로 파일의 범위를 주어진 모든 빈 셀을 변경을 "-" RowCells라는 다른 파일에 저장하십시오.

그러나 메모리 사용량을 보면 응용 프로그램이 중단 모드가 될 때까지 계속 높아지고 있습니다.

어떻게 메모리 사용을 줄일 수 있습니까?

+0

'워크 시트'도 'IDisposable'을 구현하므로 어쩌면 처분해야합니다. – Evk

+0

메모리 사용이 위의 코드와 관련이 있는지 100 % 확신합니까? – mjwills

답변

0

코드는 정상적으로 작동하지만 입력 스프레드 시트가 매우 클 수 있습니다. 어쨋거나 ClosedXML이 내부적으로 어떻게 작동하는지 모르지만 변경된 셀의 목록을 유지할 수 있습니다. 범위 내의 모든 셀을 변경하면 매우 커질 수 있으므로 변경이 필요한 셀만 변경해야합니다.

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 
{ 
    string path = txtPath.Text; 
    var workbook = new XLWorkbook(path); 
    using (var worksheet = workbook.Worksheet(txtWorksheet.Text)) 
    { 
     var cells = worksheet.Range(txtMinRange.Text+":"+txtMaxRange.Text).Cells(); 
     foreach (var c in cells) 
     { 
      if (c.Value == "") 
      { 
       c.Value = "-"; 
      } 
     } 
    } 
    workbook.SaveAs("RowCells.xlsx"); 
    workbook.Dispose(); 
} 
+0

감사합니다. 그래, 나는 파일이 너무 크기 때문이라고 생각한다. A-KC의 Column을 가지고 17,000 개의 행을 처리하려고합니다. 나는 2 시간 후에 코드를 사용해 보았는데 OutOfMemoryException을 보였다. –

+0

죄송합니다. 내 가정은 잘못되었다. –