软件开发过程中,经常需要将数据保存为.xls或.xlsx文件。之前发现微软提供的Microsoft.Office.Interop.Excel效率及其底下,所以搜集了另外4个可以独立读写Excel的开源类库,对写操作进行对比。
测试平台:
| CPU | Intel Xeon, 3200 MHz (16 x 200) |
| 主板 | MSI E7525 Master-S2 (MS-9151) |
| 内存 | 1024 MB (Registered ECC DDR2 SDRAM) |
| 操作系统 | Microsoft Windows 7 Ultimate SP1 (x86) |
| 开发平台 | Visual Studio 2010 & .Net Framework 4.0 |
| 测试代号 | 类库版本 | 运行时版本 | 网址/地址 |
| MS Excel | 14.0.0.0 | 2.0.50727 | \Microsoft Visual Studio 10.0\Visual Studio Tools for Office\PIA\Office14\ |
| ExcelPackage | 1.0.0.1 | 2.0.50727 | http://excelpackage.codeplex.com/ |
| EPPlus | 2.9.0.1 | 2.0.50727 | http://epplus.codeplex.com/ |
| NPOI | 1.2.4.0 | 4.0.30319 | http://code.google.com/p/npoi/ |
| ExcelLibrary | 1.0.0.0 | v2.0.50727 | http://code.google.com/p/excellibrary/ |
在测试开始之前,先将一个366行8列的数据集读入内存,为了避免数据存入硬盘等操作产生的误差,测试仅记录了将数据循环写入数据表中单元格所消耗的时间,为了消除可能的误差,每次操作之间设计了一个30秒的停顿,代码框架如下:
1: for (int s = 0; s < 51; s++)
2: {
3: System.Diagnostics.Stopwatch MyWatch = new System.Diagnostics.Stopwatch();
4: //初始化
5: MyWatch.Start();
6: for (int i = 0; i < rows; i++)
7: {
8: for (int j = 0; j < columns; j++)
9: {
10: //写入单元格数据;
11: }
12: }
13: MyWatch.Stop();
14: //垃圾回收;
15: textBox.AppendText(MyWatch.ElapsedMilliseconds.ToString() + "\r\n");
16: System.Threading.Thread.Sleep(30000);
17: }
取重复测试51次,首次运行一般耗时较长,未计算在内,其余的计算平均值,结果如下表所示:


近期评论