Ich versuche, eine Excel-Datei von einem ASP.NET-Webserver mit OpenXML zu schreiben. Ich habe ungefähr 2100 Aufzeichnungen und es dauert ungefähr 20-30 Sekunden, um dies zu tun. Irgendwie kann ich es schneller machen? Das Abrufen der 2100 Zeilen aus der Datenbank dauert einen Bruchteil einer Sekunde. Nicht sicher, warum das Manipulieren in der Erinnerung länger dauern würde..NET OpenXML-Leistungsprobleme
Hinweis: ExcelWriter ist unsere eigene Klasse, aber alle seine Methoden sind direkt aus dem Code in diesem Link, http://msdn.microsoft.com/en-us/library/cc861607.aspx
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;
Ich habe das gleiche Problem ... Ich muss mehr als 1000 Zeilen und in einigen Fällen mehr als 10000 Zeilen schreiben und es wird langsam wie die Hölle ... Hier sagten Sie, Sie können Hash-Tabelle verwenden können Sie ein Beispiel geben, wie? oder wenn Sie etwas anderes verwenden, um die Leistung zu verbessern ... – kunjee
Ich suche 500K Zeilen. Hast du weitere Verbesserungen vorgenommen, seit du diesen Beitrag teilen kannst? Ich bin zur SAX-Methode gewechselt, um die Speichernutzung zu minimieren. Und ich sehe ungefähr 1000 Zeilen pro ~ 1,1 Sekunden. Wenn Sie schneller als dies bitte teilen. – CaptainBli