C# System.Text.StringBuilder.ToString()中带有Excel XML字符串的System.OutOfMemoryException

C# System.Text.StringBuilder.ToString()中带有Excel XML字符串的System.OutOfMemoryException,c#,asp.net,.net,out-of-memory,stringbuilder,C#,Asp.net,.net,Out Of Memory,Stringbuilder,因此,最近我一直在编写C#/ASP.NET中的代码,该代码在选择大参数时抛出一个错误: 引发了“System.OutOfMemoryException”类型的异常。在 System.Text.StringBuilder.ToString()文件 概述: 代码根据用户的选择从数据库查询一组数据,并将其放入Excel文档中,然后由用户导出/下载。它首先使用StringBuilder将XML的前缀附加为: const string startExcelXML = "<xml version>

因此,最近我一直在编写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 ";

当追加时发生引用的其他堆栈溢出问题,而My是返回toStutter()时,因此问题的原因可能不同,因为它不发生在环中的追加中,而是发生在转换过程/返回中。根本原因是什么?如何修复它?

看起来字符串比内存占用的空间大


我把这个问题放在backburner上,但现在我要回到它。如果我要实现这样的代码,在stringbuilder附加的每X个循环(比如一个arbitruary 100)之后,它将转换为字符串并将其中的内容附加到“meta”字符串,清除stringbuilder,然后在循环完成后返回meta字符串,理论上,这是否更可行?
const string endExcelXML = "</Workbook>";
    System.Diagnostics.Debug.WriteLine("String:", contentSB);
    System.Diagnostics.Debug.WriteLine("String length:", contentSB.Length);