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((时,因此问题的原因可能不同,因为它不是发生在循环中的追加中间,而是发生在转换过程/返回中。根本原因是什么?我该如何解决?

System.OutOfMemoryException,位于System.Text.StringBuilder.ToSt

看起来字符串比内存所能占用的要大。你猜你能在内存中保留对大型对象的长期引用吗?

  • http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/5050e855-20d0-4fc5-97b6-79fdc7f176c6/
  • C#Stringbuilder内存不足异常