.NET OpenXML-Leistungsprobleme

Ich versuche, mit OpenXML eine Excel-Datei von einem ASP.NET-Webserver zu schreiben. Ich habe ungefähr 2100 Datensätze und es dauert ungefähr 20-30 Sekunden, um dies zu tun. Wie kann ich es schneller machen? Das Abrufen der 2100 Zeilen aus der Datenbank dauert einen Bruchteil einer Sekunde. Ich bin mir nicht sicher, warum es länger dauern würde, sie im Speicher zu manipulieren.

Hinweis: ExcelWriter ist unsere benutzerdefinierte Klasse, alle Methoden stammen jedoch direkt aus dem Code in diesem Link.http://msdn.microsoft.com/en-us/library/cc861607.aspx

<code>   public static MemoryStream CreateThingReport(List<Thing> things, MemoryStream template)
    {
        SpreadsheetDocument spreadsheet = SpreadsheetDocument.Open(template, true);
        WorksheetPart workSheetPart = spreadsheet.WorkbookPart.WorksheetParts.First();

        SharedStringTablePart sharedStringPart = spreadsheet.WorkbookPart.GetPartsOfType<SharedStringTablePart>().First();

        Cell cell = null;
        int index = 0;

        //create cell formatting for header text
        Alignment wrappedAlignment = new Alignment { WrapText = true };
               uint rowOffset = 2;

  foreach (Thing t in things)
        {
            //Received Date
            cell = ExcelWriter.InsertCellIntoWorksheet("A", rowOffset, workSheetPart);
            index = ExcelWriter.InsertSharedStringItem(t.CreateDate.ToShortDateString(), sharedStringPart);
            cell.CellValue = new CellValue(index.ToString());
            cell.DataType = new DocumentFormat.OpenXml.EnumValue<CellValues>(CellValues.SharedString);

            //Car Part Name
            cell = ExcelWriter.InsertCellIntoWorksheet("B", rowOffset, workSheetPart);
            index = ExcelWriter.InsertSharedStringItem(t.CarPart.Name, sharedStringPart);
            cell.CellValue = new CellValue(index.ToString());
            cell.DataType = new DocumentFormat.OpenXml.EnumValue<CellValues>(CellValues.SharedString);

  rowOffset++; 
   }

 workSheetPart.Worksheet.Save();

        spreadsheet.WorkbookPart.Workbook.Save();
        spreadsheet.Close();

        return template;
</code>

Antworten auf die Frage(4)

Ihre Antwort auf die Frage