Estoy intentando escribir un archivo Excel desde un servidor web ASP.NET usando OpenXML. Tengo alrededor de 2100 registros y tomar alrededor de 20-30 segundos para hacer esto. ¿De alguna manera puedo hacerlo más rápido? Recuperar las 2100 filas del db lleva una fracción de segundo. No estoy seguro de por qué la manipulación de ellos en la memoria tomaría más tiempo..NET Problemas de rendimiento OpenXML
Nota: ExcelWriter es nuestra clase personalizada, pero todos sus métodos son directamente de código en este enlace, 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;
Me enfrenta el mismo problema ... Tengo que escribir más de 1000 filas y en algunos casos más de 10000 filas y se está volviendo lento como el infierno ... Aquí dijiste que puedes usar tabla hash ¿puedes dar un ejemplo de cómo? o si alguna otra cosa usaste para mejorar el rendimiento ... – kunjee
Estoy viendo 500,000 filas. ¿Has hecho otras mejoras desde esta publicación que podrías compartir? Me cambié al método SAX para minimizar el uso de la memoria. Y veo aproximadamente 1000 filas por ~ 1.1 segundos. Si te vuelves más rápido que esto, comparte. – CaptainBli