Ja próbuje 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 jaki sposób mogę to przyspieszyć? Pobieranie 2100 wierszy z bazy danych zajmuje ułamek sekundy. Nie wiem, dlaczego manipulowanie nimi w pamięci wymagałoby więcej czasu.wydajność NET OpenXML wystawia
Uwaga: ExcelWriter jest nasz zwyczaj klasy, ale wszystkie jej metody są bezpośrednio z kodu w ten 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;
Mam do czynienia z tym samym problemem ... Muszę napisać 1000 wierszy, aw niektórych przypadkach 10000 wierszy i robi się powoli jak cholera ... Tutaj powiedziałeś, że możesz użyć tabeli mieszania możesz podać przykład jak? lub jakakolwiek inna rzecz, której użyłeś do poprawy wydajności ... – kunjee
Patrzę na wiersze 500K. Czy wprowadziłeś inne ulepszenia od tego wpisu, który możesz udostępnić? Przejdę do metody SAX, aby zminimalizować wykorzystanie pamięci. I widzę około 1000 rzędów na ~ 1,1 sekundy. Jeśli pojawi się szybciej niż to, proszę udostępnij. – CaptainBli