Problemy z wydajnością .NET OpenXML

Próbuję napisać plik Excel z serwera WWW ASP.NET przy użyciu OpenXML. Mam około 2100 rekordów i zajmuje to około 20-30 sekund. W jakikolwiek sposób mogę to zrobić szybciej? Pobieranie 2100 wierszy z bazy danych zajmuje ułamek sekundy. Nie jestem pewien, dlaczego manipulowanie nimi w pamięci zajęłoby więcej czasu.

Uwaga: ExcelWriter jest naszą klasą niestandardową, ale wszystkie jego metody pochodzą bezpośrednio z kodu w tym łączu,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>

questionAnswers(4)

yourAnswerToTheQuestion