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をはじめとする各ライブラリ(ClosedXML、OpenXml、EPPlus、NPOI)を使用して「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 | Error | |||
---|---|---|---|---|---|
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 | Error | StdDev | ||
---|---|---|---|---|---|
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がリリースされる予定なので、そのタイミングでまた測定してみたいと思います。
弊社Webサイトでは、製品の機能を気軽に試せるデモアプリケーションやトライアル版も公開していますので、こちらもご確認いただければと思います。
また、ご導入前の製品に関するご相談やご導入後の各種サービスに関するご質問など、お気軽にお問合せください。