2012-08-05 2 views
0

이것은 우리가에 OutofMemory 예외는 응용 프로그램 로그 파일에

2012-07-19 15을 받고 오류입니다)] - 로깅 : System.OutOfMemoryException : 형식이 예외 예외가 발생했습니다. 'System.OutOfMemoryException'이 (가) throw되었습니다. (문자열 값, ) System.String.GetStringForStringBuilder (문자열 값, Int32 startIndex, Int32 길이, Int32 용량)에서 System.Text.StringBuilder.Append (String value)의 System.Text.StringBuilder.GetNewString

어느 한이 문제를 방지하는 방법을 제안 할 수 있습니다. 우리는 엑셀 시트 여기

에 데이터를 작성하기위한 문자열 빌더를 사용하고 전체 CSV 파일을 생성하지 않으려 코드

public void ToCSV(DataTable dt) 
{ 
    StringBuilder sb = null; 
    try 
    { 

     sb = new StringBuilder(50*1024); 
     foreach (DataColumn col in dt.Columns) 
     { 
      sb.Append(col.ColumnName + ","); 
     } 
     sb.Remove(sb.Length - 1, 1); 
     sb.Append(Environment.NewLine); 
     foreach (DataRow row in dt.Rows) 
     { 
      for (int i = 0; i < dt.Columns.Count; i++) 
      { 
       sb.Append("\"" + row[i].ToString() + "\"" + ","); 
      } 
      sb.Append(Environment.NewLine); 
     } 
     Session["exportsCsv"] = sb; 
     sb = null; 


    } 
    catch (Exception ex) 
    { 
     log4net.Config.XmlConfigurator.Configure(); 
     log.Warn("Logging:" + ex); 

    } 
    finally { 
     sb = null; 

    } 
    // 
+0

후 관련 코드 바랍니다. 당신이 우리에게 PC 용 (임베디드, 서버, 개인) 유형과 예외가 잘 로그 도움이 될 코드를보고 – twoflower

+0

우리는 'BTW 당신이 돈 ... – hellow

+0

을 던져졌다 몇 가지 코드와 같은 몇 가지 추가 정보를 제공하지 않는 경우 – Pacane

답변

0
sb.Append("\"" + row[i].ToString() + "\"" + ","); 

===>

sb.Append('\"').Append(row[i].ToString()).Append("\","); 

에게 있습니다 한 StringBuilder에서 대신 스트림에 쓰십시오.

0

얼마나 많은 데이터를 CSV 파일에 추가하나요? StringStringBuilder 클래스는 2^31-1 (2,147,483,647) 자로 제한되어 있으며 컴퓨터의 메모리에 의해 더 이상 제한 될 수 있습니다.

는 파일 또는 네트워크 클라이언트에 많은 양의 데이터를 기록하려면 그것을 대신 Stream에 기록.

public void ToCSV(DataTable dt, Stream outStream) 
{ 
    StreamWriter writer = new StreamWriter(outStream); 
    try 
    { 
     bool first = true; 
     foreach (DataColumn col in dt.Columns) 
     { 
      if (first) 
       first = false; 
      else 
       writer.Write(","); 

      writer.Write(col.ColumnName); 
     } 
     writer.WriteLine(); 
     foreach (DataRow row in dt.Rows) 
     { 
      for (int i = 0; i < dt.Columns.Count; i++) 
      { 
       writer.Write("\"" + row[i].ToString() + "\"" + ","); 
      } 
      writer.WriteLine(); 
     } 
     // Not sure what to replace this with: 
     //Session["exportsCsv"] = sb; 
    } 
    catch (Exception ex) 
    { 
     log4net.Config.XmlConfigurator.Configure(); 
     log.Warn("Logging:" + ex); 
    } 
} 
+0

감사를해야합니다. 'Session [ "exportsCsv"]'와 어떤 관련이 있습니까? ASP 페이지와 관련이 있다고 생각합니다. 경험이 거의 없습니다. – SPL

+0

미안 하나 더 질문에 시도를 주겠다 추가 정보를 – SPL

+0

에서 스트림 outstream 변수에 전달해야한다 무엇이 –

관련 문제