.NET Core 3.1と .NET 5でDioDocs for Excelのベンチマークを確かめてみる

本記事では、現時点でのLTS「 .NET Core 3.1」と最新のリリースバージョン「 .NET 5」において、DioDocs for Excel(ディオドック)とその他のExcel操作ライブラリ(ClosedXML、OpenXml、EPPlus、NPOI)を使用して、Excelファイルを生成した際の測定結果を紹介します。

はじめに

以前の記事(2019年10月31日)では .NET Core 3.0でベンチマークを測定していました。今回は改めて .NET Core 3.1と .NET 5で同じ処理を実行しています。

実行環境

ベンチマークの測定には、 .NET Core 3.1と .NET 5で動作するコンソールアプリケーションを作成して使用しています。測定に使用した実行環境は以下のとおりです。

  • OS:Windows 10.0.19043.51(21H1/May2021Update)
  • CPU:Intel Core i7-7500U CPU 2.70GHz
  • メモリ:24GB
  • .NET Core 3.1.18(CoreCLR 4.700.21.35901、CoreFX 4.700.21.36305、X64 RyuJIT)
  • .NET 5.0.9(5.0.921.35908)、X64 RyuJIT
  • BenchmarkDotNet:0.13.1
  • CloseXML:0.95.4
  • DocumentFormat.OpenXml:2.13.1
  • EPPlus:5.7.3
  • GrapeCity.DioDocs.Excel.ja:4.1.2
  • NPOI:2.5.4

コンソールアプリケーションのソースコードは以下に置いています。

https://github.com/GrapeCityJP/DioDocsBenchmarkApp1

実行する内容

このコンソールアプリケーションで実行する処理は、DioDocs for Excelをはじめとする各ライブラリを使用して「100 x 100の範囲のセルに文字を設定したExcelファイルを生成する」処理を記載しています。ベンチマークの測定にはBenchmarkDotNetを使用しています。

以下はDioDocs for Excelを使用した場合のコードですが、他のライブラリでも同じように上記の処理を実装しています。

private const int ColumnNum = 100;
private const int RowNum = 100;

public void DioDocs()
{
    var workbook = new GrapeCity.Documents.Excel.Workbook();

    var worksheet = workbook.ActiveSheet;
    for (var i = 1; i <= ColumnNum; i++)
    {
        for (var j = 1; j <= RowNum; j++)
        {
            worksheet.Range[i, j].Value = "Hello World!";
        }
    }

    workbook.Save(Stream.Null);
}

測定結果

.NET Core 3.1と .NET 5でそれぞれ測定した結果です。各ライブラリの「Mean(Arithmetic mean of all measurements)」の数値を比較してみると、どちらのバージョンでも他のライブラリよりもDioDocsが速いことが確認できます。さらに .NET Core 3.1よりも .NET 5で測定した結果の方がさらに速い(DioDocsに限りませんが)ことも確認できます。

測定結果(.NET Core 3.1)
測定結果(.NET 5)

最後に

2021年11月9~11日に予定されている「 .NET Conf 2021」で「 .NET 6」がリリースされる予定です(2021年8月時点では .NET 6 Preview 7がリリースされています)。

そのタイミングでまた測定してみたいと思います。


追記(2021.10.07)

DioDocs for ExcelとNPOIの比較資料を公開しました。機能と色々な処理パフォーマンスの比較をまとめた資料になっています。

機能比較(DioDocs for ExcelとNPOI)