System.OutOfMemoryException,位于System.Text.StringBuilder.ToSt
本文关键字:System StringBuilder ToSt Text 位于 OutOfMemoryException | 更新日期: 2023-09-27 18:11:17
最近我一直在C#/ASP.NET中处理在选择大参数时会引发错误的代码:
引发了类型为"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问题:StringBuilder 的有趣的OutOfMemoryException
思想:我尝试使用以下代码来大致了解字符串的大小,它适用于较小的选择,但不输出任何内容用于较大的选择,以及contentSB是StringBuilder对象的位置:
System.Diagnostics.Debug.WriteLine("String:", contentSB);
System.Diagnostics.Debug.WriteLine("String length:", contentSB.Length);
引用的另一个StackOverflow问题发生在追加时,而我的问题发生在返回ToString((时,因此问题的原因可能不同,因为它不是发生在循环中的追加中间,而是发生在转换过程/返回中。根本原因是什么?我该如何解决?
看起来字符串比内存所能占用的要大。你猜你能在内存中保留对大型对象的长期引用吗?
- http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/5050e855-20d0-4fc5-97b6-79fdc7f176c6/
- C#Stringbuilder内存不足异常