Tôi đang cố viết một tệp Excel từ một máy chủ web ASP.NET sử dụng OpenXML. Tôi có khoảng 2100 hồ sơ và mất khoảng 20-30 giây để làm điều này. Bất kỳ cách nào tôi có thể làm cho nó nhanh hơn? Lấy 2100 hàng từ db mất một phần nhỏ của một giây. Không chắc chắn lý do tại sao thao tác chúng trong bộ nhớ sẽ mất nhiều thời gian hơn.Các vấn đề về hiệu suất OpenXML .NET
Lưu ý: ExcelWriter là lớp tùy chỉnh của chúng tôi, nhưng tất cả các phương pháp của nó là trực tiếp từ mã trong liên kết này, 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;
Tôi đang đối mặt với cùng một vấn đề ... Tôi cần viết 1000+ hàng và trong một số trường hợp 10000+ hàng và nó đang nhận được chậm như địa ngục ... Ở đây bạn nói bạn có thể sử dụng bảng băm bạn có thể cho một ví dụ như thế nào? hoặc nếu có bất kỳ thứ gì khác bạn sử dụng để cải thiện hiệu suất ... – kunjee
Tôi đang xem 500 nghìn hàng. Bạn đã thực hiện các cải tiến nào khác từ bài đăng này bạn có thể chia sẻ? Tôi đã chuyển sang phương thức SAX để giảm thiểu mức sử dụng bộ nhớ. Và tôi thấy khoảng 1000 hàng mỗi ~ 1,1 giây. Nếu bạn nhận được nhanh hơn này xin vui lòng chia sẻ. – CaptainBli