NPOIエクスポートExcelの性能試験
イントロ
インターネットは多くの人がNPOIののパフォーマンスは、彼がNPOI拡張を書いていないということを言って見るので、NPOIのパフォーマンスを見て試してみたいと何が起こるか、伝聞はそれを自分で試してみるのが無難です。
テスト環境
ツールをテストします:
- BenchmarkDotNet v0.11.5
- EPPlus.Core.Extensions v2.3.2
- EPPlus v4.5.3.1
テストコード:( のGitHub源)
[SimpleJob(launchCount: 1, warmupCount: 1, targetCount: 5)]
[MemoryDiagnoser]
[MinColumn, MaxColumn, MeanColumn, MedianColumn]
public class WorkbookBasicTest
{
private const int ColsCount = 10;
[Params(10000, 30000, 50000, 65535)]
public int RowsCount;
[Benchmark(Baseline = true)]
public byte[] NpoiXlsWorkbookInit()
{
var workbook = ExcelHelper.PrepareWorkbook(ExcelFormat.Xls);
var sheet = workbook.CreateSheet("tempSheet");
for (var i = 0; i < RowsCount; i++)
{
var row = sheet.CreateRow(i);
for (var j = 0; j < ColsCount; j++)
{
var cell = row.CreateCell(j);
cell.SetCellValue($"as ({i}, {j}) sa");
}
}
return workbook.ToExcelBytes();
}
[Benchmark]
[MethodImpl(MethodImplOptions.NoInlining)]
public byte[] NpoiXlsxWorkbookInit()
{
var workbook = ExcelHelper.PrepareWorkbook(ExcelFormat.Xlsx);
var sheet = workbook.CreateSheet("tempSheet");
for (var i = 0; i < RowsCount; i++)
{
var row = sheet.CreateRow(i);
for (var j = 0; j < ColsCount; j++)
{
var cell = row.CreateCell(j);
cell.SetCellValue($"as ({i}, {j}) sa");
}
}
return workbook.ToExcelBytes();
}
[Benchmark]
[MethodImpl(MethodImplOptions.NoInlining)]
public byte[] EpplusWorkbookInit()
{
var excel = new ExcelPackage();
var sheet = excel.Workbook.Worksheets.Add("tempSheet");
for (var i = 1; i <= RowsCount; i++)
{
for (var j = 1; j <= ColsCount; j++)
{
sheet.Cells[i, j].Value = $"as ({i}, {j}) sa";
}
}
return excel.GetAsByteArray();
}
}
テスト結果
BenchmarkDotNet=v0.11.5, OS=Windows 10.0.18362
Intel Core i5-3470 CPU 3.20GHz (Ivy Bridge), 1 CPU, 4 logical and 4 physical cores
.NET Core SDK=3.0.100
[Host] : .NET Core 2.2.6 (CoreCLR 4.6.27817.03, CoreFX 4.6.27818.02), 64bit RyuJIT
Job-CBYTBY : .NET Core 2.2.6 (CoreCLR 4.6.27817.03, CoreFX 4.6.27818.02), 64bit RyuJIT
IterationCount=5 LaunchCount=1 WarmupCount=1
方法 | RowsCount | 平均 | エラー | STDDEV | 私に | マックス | 中央値 | 比率 | RatioSD | ゲン0 | ゲン1 | 第2世代 | 割り当てられました |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
NpoiXlsWorkbookInit | 10000 | 324.7ミリ | 1.583ミリ秒 | 0.4110ミリ | 324.3ミリ | 325.4ミリ | 324.6ミリ | 1.00 | 0.00 | 10000.0000 | 5000.0000 | 2000.0000 | 78.6メガバイト |
NpoiXlsxWorkbookInit | 10000 | 1,369.0ミリ | 73.747ミリ秒 | 19.1517ミリ秒 | 1,341.3ミリ | 1,384.4ミリ | 1,381.1ミリ | 4.22 | 0.06 | 57000.0000 | 14000.0000 | 4000.0000 | 306.45メガバイト |
EpplusWorkbookInit | 10000 | 552.9ミリ | 12.740ミリ秒 | 3.3085ミリ | 549.7ミリ | 557.7ミリ | 552.4ミリ | 1.70 | 0.01 | 18000.0000 | 7000.0000 | 3000.0000 | 121.05メガバイト |
NpoiXlsWorkbookInit | 30000 | 1,222.4ミリ | 33.717ミリ秒 | 8.7562ミリ | 1,209.0ミリ | 1,233.1ミリ | 1,222.5ミリ | 1.00 | 0.00 | 29000.0000 | 11000.0000 | 3000.0000 | 235.03メガバイト |
NpoiXlsxWorkbookInit | 30000 | 4,226.2ミリ | 299.833ミリ秒 | 77.8658ミリ秒 | 4,109.5ミリ | 4,308.6ミリ | 4,257.2ミリ | 3.46 | 0.08 | 174000.0000 | 34000.0000 | 6000.0000 | 913.9メガバイト |
EpplusWorkbookInit | 30000 | 1,695.4ミリ | 31.751ミリ秒 | 8.2457ミリ | 1,686.3ミリ | 1,706.5ミリ | 1,694.2ミリ | 1.39 | 0.02 | 48000.0000 | 17000.0000 | 5000.0000 | 358.51メガバイト |
NpoiXlsWorkbookInit | 50000 | 2,323.5ミリ | 236.041ミリ秒 | 61.2990ミリ秒 | 2,286.0ミリ | 2,431.9ミリ | 2,294.2ミリ | 1.00 | 0.00 | 47000.0000 | 18000.0000 | 4000.0000 | 417.1メガバイト |
NpoiXlsxWorkbookInit | 50000 | 7,055.2ミリ | 279.256ミリ秒 | 72.5218ミリ秒 | 6,982.8ミリ | 7,150.2ミリ | 7,027.2ミリ | 3.04 | 0.10 | 288000.0000 | 51000.0000 | 6000.0000 | 1545.32メガバイト |
EpplusWorkbookInit | 50000 | 2,806.9ミリ | 56.266ミリ秒 | 14.6121ミリ秒 | 2,792.9ミリ | 2,829.1ミリ | 2,804.6ミリ | 1.21 | 0.03 | 79000.0000 | 27000.0000 | 7000.0000 | 578.46メガバイト |
NpoiXlsWorkbookInit | 65535 | 3,646.8ミリ | 131.129ミリ秒 | 34.0537ミリ秒 | 3,603.0ミリ | 3,696.3ミリ | 3,642.5ミリ | 1.00 | 0.00 | 61000.0000 | 21000.0000 | 4000.0000 | 504.46メガバイト |
NpoiXlsxWorkbookInit | 65535 | 9,295.6ミリ | 486.761ミリ秒 | 126.4104ミリ | 9,163.3ミリ | 9,468.6ミリ | 9,330.5ミリ | 2.55 | 0.04 | 390000.0000 | 67000.0000 | 8000.0000 | 2048.14メガバイト |
EpplusWorkbookInit | 65535 | 3,721.6ミリ | 124.945ミリ秒 | 32.4478ミリ秒 | 3,680.7ミリ | 3,766.8ミリ | 3,714.1ミリ | 1.02 | 0.01 | 102000.0000 | 35000.0000 | 8000.0000 | 747.85メガバイト |
以上の試験結果から、npoi XLSの輸出実績はまだかなり良いですが、データなしの65,535行までの時間を物質またはメモリが支配的で、XLSだけシート、epplus輸出のxlsx続いのみ、最大65535へのテストデータなので、ほとんどの時間は、npoi輸出XLSXました。
テスト結果
エクスポートに推奨エクスポートするNPOIを使用している場合、xls
あなたはより多くのデータをCSV形式にエクスポートすることができますエクスポートする場合は、CSV形式のテストをエクスポートするほかに見た場合、はるかに良い、それはExcelエクスポート、インポートにある場合よりも、CSVエクスポートのパフォーマンスを得意とxls
し、いくつかの中に我々は、輸出する場合はシート処理は、xlsx
epplusに対処するために推奨される形式エクセル、npoiはに比べて輸出しxlsx
、より良い性能、小さなメモリフットプリント