我有一个关于在C#中加载Excel(Xlsx)文件的问题。我已经使用NPOI 2.0实现了Excel文件的加载,但性能非常差(在Win7运行时,加载10000行和60列需要15到25秒,使用Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz (4 CPUs),~2.5GHz)。我认为这是因为NPOI 2.0仍处于beta版本,所以我尝试了另一个库EPPlus,但它仍然需要大约相同的时间来加载Excel文件。
下面是我如何使用EPPlus进行加载:
根据 dotTrace Profiler 的结果显示,大约 40% 的时间浪费在 get_Workbook 方法上(通过访问“package.Workbook”属性调用该方法),然后又有 30% 的时间浪费在 get_Item 和 get_Value 调用中,再有 5% 的时间浪费在 AddCellValue 方法上(这是我的数据模型),其余的时间则分散在各种方法调用中。
我是否做错了什么,还是这种性能正常?
谢谢。
下面是我如何使用EPPlus进行加载:
var existingFile = new FileInfo(path);
var excelData = new ExcelViewModel(path);
// Open and read the XlSX file.
using (var package = new ExcelPackage(existingFile))
{
// Get the work book in the file
ExcelWorkbook workBook = package.Workbook;
if (workBook != null)
{
// Here is some initializing......
var viewSheetModel = new ExcelSheetViewModel(sheet.Name, numberOfColumns, titles);
for (var row = titleRowIndex + 1; row <= end.Row; ++row)
{
var viewRowModel = new ExcelRowViewModel();
for (int column = start.Column; column <= end.Column; ++column)
{
var cell = sheet.Cells[row, column];
viewRowModel.AddCellValue(cell.Value != null ? cell.Value.ToString() : string.Empty);
}
viewSheetModel.Rows.Add(viewRowModel);
}
excelData.AddSheet(viewSheetModel);
}
}
根据 dotTrace Profiler 的结果显示,大约 40% 的时间浪费在 get_Workbook 方法上(通过访问“package.Workbook”属性调用该方法),然后又有 30% 的时间浪费在 get_Item 和 get_Value 调用中,再有 5% 的时间浪费在 AddCellValue 方法上(这是我的数据模型),其余的时间则分散在各种方法调用中。
我是否做错了什么,还是这种性能正常?
谢谢。