System.OutOfMemoryException-System.Text.StringBuilder.ToString() mit Excel-XML-String

Also vor kurzem habe ich gearbeitet, auf code in C#/ASP.NET, der wirft einen Fehler bei der Auswahl von großen Parametern:

Ausnahme des Typs " System.OutOfMemoryException " wurde ausgelöst. bei
System.Text.StringBuilder.ToString()

Allgemeiner Überblick:
Code-Abfragen eine Reihe von Daten aus einer Datenbank basierend auf einer Auswahl durch den Benutzer und legt in in ein Excel-Dokument exportiert werden/durch den Nutzer heruntergeladen. Es verwendet zunächst StringBuilder mit append das Präfix des XML mit:

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 ";

Geht es dann durch eine Schleife, die geht durch und fügt </Data></Cell> und dergleichen, wie erforderlich, bevor Sie schließlich mit Anhängen:

const string endExcelXML = "</Workbook>";

Nach, dass es dann return contentSB.ToString(); Da nur ToString() in der Methode die Ausnahme Referenzen, es hat werden dieses Stück code.

Ähnlich StackOverflow-Frage:
interessant OutOfMemoryException mit StringBuilder

Gedanken:
Ich habe versucht, verwenden Sie den folgenden code, um eine Allgemeine Idee davon bekommen, wie groß der string ist, Werke, die für kleinere Auswahl, aber nichts ausgibt für größere Auswahl und wo contentSB ist die StringBuilder-Objekt:

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

Den referenzierten anderen StackOverflow Problem tritt beim Anhängen, während mine ist, wenn wieder ein ToString () auf, sodass die Ursache des Problems könnte anders sein als es geschieht nicht in der Mitte von Anhängen in der Schleife, aber in der Konvertierung/return. Was ist die Ursache und wie behebe ich es?

InformationsquelleAutor Kurt Wagner | 2013-04-27
Schreibe einen Kommentar