NPOIエクスポートExcelの性能試験

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();
    }
}

テスト結果

Githubの上の結果を表示https://github.com/WeihanLi/WeihanLi.Npoi/blob/dev/perf/WeihanLi.Npoi.Benchmark/BenchmarkDotNet.Artifacts/results/WeihanLi.Npoi.Benchmark.WorkbookBasicTest-report-github.md


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し、いくつかの中に我々は、輸出する場合はシート処理は、xlsxepplusに対処するために推奨される形式エクセル、npoiはに比べて輸出しxlsx、より良い性能、小さなメモリフットプリント

参照

おすすめ

転載: www.cnblogs.com/weihanli/p/npoi-export-perf-test.html