2013-04-27 58 views
2

所以最近我一直在C#/ ASP.NET代碼是大參數的選擇過程中拋出一個錯誤:的System.OutOfMemoryException在System.Text.StringBuilder.ToString()與Excel XML字符串

引發類型'System.OutOfMemoryException'的異常。在 System.Text.StringBuilder.ToString()

總體概述: 代碼基於一個由用戶選擇的數據庫查詢一組數據,並放入到一個Excel文件,然後將是由用戶導出/下載。它首先使用StringBuilder的與追加XML的前綴:

const string startExcelXML = "<xml version>\r\n<Workbook " + 
"xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\"\r\n" + 
" xmlns:o=\"urn:schemas-microsoft-com:office:office\"\r\n " + 
"xmlns:x=\"urn:schemas- microsoft-com:office:" + 
"excel\"\r\n xmlns:ss=\"urn:schemas-microsoft-com:" + 
"office:spreadsheet\">\r\n <Styles>\r\n " + 
"<Style ss:ID=\"Default\" ss:Name=\"Normal\">\r\n " + 
"<Alignment ss:Vertical=\"Bottom\"/>\r\n <Borders/>" + 
"\r\n <Font/>\r\n <Interior/>\r\n <NumberFormat/>" + 
"\r\n <Protection/>\r\n </Style>\r\n " + 
"<Style ss:ID=\"BoldColumn\">\r\n <Font " + 
"x:Family=\"Swiss\" ss:Bold=\"1\"/>\r\n </Style>\r\n " + 
"<Style  ss:ID=\"StringLiteral\">\r\n <NumberFormat" + 
" ss:Format=\"@\"/>\r\n </Style>\r\n <Style " + 
"ss:ID=\"Decimal\">\r\n <NumberFormat " + 
"ss:Format=\"0.0000\"/>\r\n </Style>\r\n " + 
"<Style ss:ID=\"Integer\">\r\n <NumberFormat " + 
"ss:Format=\"0\"/>\r\n </Style>\r\n <Style " + 
"ss:ID=\"DateLiteral\">\r\n <NumberFormat " + 
"ss:Format=\"mm/dd/yyyy;@\"/>\r\n </Style>\r\n " + 
"</Styles>\r\n "; 

然後通過一個循環,通過去,並根據需要追加</Data></Cell>等最後用追加前雲:

const string endExcelXML = "</Workbook>"; 

後那麼它return contentSB.ToString();由於這是異常引用的方法中唯一的ToString(),所以它已將作爲這段代碼。

類似StackOverflow的問題: interesting OutOfMemoryException with StringBuilder

思考: 我用下面的代碼試圖得到的字符串有多大是一個普遍的想法,這對較小的選擇,但沒有按」對於較大的選擇和其中t輸出任何東西contentSB是StringBuilder對象:

System.Diagnostics.Debug.WriteLine("String:", contentSB); 
    System.Diagnostics.Debug.WriteLine("String length:", contentSB.Length); 

追加時,會出現引用的其他StackOverflow的問題,wherea當我返回一個ToString()的時候,所以問題的原因可能會有所不同,因爲它不會出現在循環中的追加中,而是出現在轉換過程/返回中。什麼是根本原因,我該如何解決它?

回答

1
+0

我把次要地位這個問題,但我現在回來吧。如果我要實現這樣的代碼,以便在每個X循環(比如說一個仲裁函數100)之後的字符串構建器附加後,它將轉換爲字符串,並將其中的內容附加到「元」字符串,清除字符串構建器,然後它完成循環,返回元字符串,理論上應該是更可能工作? – 2013-05-08 18:52:00