GrapeCity.devlog

グレープシティ株式会社のDeveloper Tools〈開発支援ツール〉の、製品のTIPSや発売などに関する最新情報をお届けします。

GrapeCity

.NET Core 3.0でDioDocsのベンチマークを確かめてみる

2019年9月23日に「.NET Core 3.0」がリリースされました。

ご存知の方も多いと思いますが、「.NET Core」は従来の「.NET Framework」と比較しても軽量・高速に動作するフレームワークだとアナウンスされています。

以下のCodeZine記事では、その当時の最新バージョンである「.NET Core 2.1」で「DioDocs(ディオドック)」を使用したExcelファイル出力のベンチマークを測定しており、実際に「.NET Frameworkで処理を実行した場合に比べて.NET Coreで実行した方が速い」という結果が出ています。

そこで本記事では、現時点で最新の「.NET Core 3.0」において、DioDocsとその他のライブラリを使用して、Excelファイルを生成した際の測定結果を紹介します。

一足先に結論を言ってしまいますが「DioDocs」イチバン速いですよ!

はじめに

ベンチマークの測定には、DioDocsのCodeZine記事を執筆いただいている中村 充志さんGitHubで公開しているコードをベースに、.NET Core 3.0で動作するコンソールアプリケーションを作成して使用しています。

実行する内容

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

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

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

public void DioDocs()
{
    var workbook = new 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);
}

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

実行環境

測定に使用した実行環境は以下のとおりです。

  • OS:Windows 10.0.17763.737 (1809/October2018Update/Redstone5)
  • CPU:Intel Core i7-7500U CPU 2.70GHz
  • メモリ:24GB
  • .NET Core 2.1.13 (CoreCLR 4.6.28008.01, CoreFX 4.6.28008.01), 64bit RyuJIT
  • .NET Core 3.0.0 (CoreCLR 4.700.19.46205, CoreFX 4.700.19.46214), 64bit RyuJIT
  • BenchmarkDotNet:v0.11.5

測定結果

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

.NET Core 2.1
Method N
Mean
Error
StdDev
Median
DioDocs 1000 19.43 ms 0.9909 ms 2.922 ms 19.25 ms
ClosedXML 1000 106.01 ms 4.0334 ms 11.507 ms 106.20 ms
OpenXml 1000 82.96 ms 3.1830 ms 9.234 ms 80.14 ms
EPPlus 1000 36.03 ms 1.4367 ms 4.168 ms 35.16 ms
NPOI 1000 27.49 ms 1.4580 ms 4.276 ms 28.05 ms
.NET Core 3.0
Method N
Mean
Error StdDev
Median
DioDocs 1000 14.04 ms 0.7314 ms 2.1102 ms 13.28 ms
ClosedXML 1000 75.60 ms 2.5267 ms 7.1678 ms 72.49 ms
OpenXml 1000 52.12 ms 1.1033 ms 2.3273 ms 51.31 ms
EPPlus 1000 24.79 ms 0.3618 ms 0.3384 ms 24.89 ms
NPOI 1000 20.38 ms 1.1920 ms 3.5146 ms 20.29 ms

以上です。今後もLTSになる.NET Core 3.1や.NET 5がリリースされる予定なので、そのタイミングでまた測定してみたいと思います。

  • グレープシティ株式会社のDeveloper Tools〈開発支援ツール〉ではエンジニア経験者を幅広く募集しています。
  • グレープシティ株式会社のDeveloper Tools〈開発支援ツール〉の製品のデモアプリケーションをお試しください。