C#でのエクセル読出し速度を比較してみた(1)
どもです。
今回は、C#でのエクセルデータ読出し速度を比較してみた内容について書きます。
0. はじめに
まず初めに、C#でエクセルのデータを読み出すために使用するライブラリ/パッケージとしては、ClosedXMLとExcelDataReaderが有名です。この2つのライブラリの性能を比較した結果も、ネットに溢れています。そして、(調べられた限りでは)その全てにおいて、“ExcelDataReader"の方が速いと結論づけられています。
ところで、この読出し速度(性能)を比較する際に使用しているデータは、1つのシートに1つのテーブル、かつシートの先頭からテーブルが開始している、という内容でした。この比較の仕方を見て思いました。
1つのシートに複数のテーブルがあり、その中から任意のテーブルの値を読み出す場合には、どちらが速いのだろう?
そこで今回は、この疑問について調べたので、その方法と結果について書きます。
1. 比較環境
今回のエントリでは、以下の環境で作業を行います。
項目 | 内容 |
---|---|
OS | Windows10 Pro(22H2) |
CPU | i7-8700 |
メモリ | 16GB |
IDE | Visual Studio Commnuity 2019 version 16.11.19 |
ClosedXML | ver.0.97.0.0 |
ExcelDataReader | ver.3.6.0.0 |
ExcelDataReader.DataSet | ver.3.6.0.0 |
2. 比較手順
比較は、以下の手順で行います。
- 任意のシートから、任意の文字列(テーブル名)がセットされたセルを見つける。(見つけたセルの1行下、1列右のセルを、テーブルの先頭のセルとする。)
- テーブルの先頭列から右方向に、空白のセルが見つかるまで読み込む。
(読み込んだ値は、テーブルヘッダとする。) - テーブルの先頭の次の行、先頭列から右方向に1行分読み出す。
- 各行の先頭列が空白になるまで、1行ずつ読み出す。
ここで、テストを容易にするために、これらの手順を実施するラッパとなるクラスを、各ライブラリ毎に作成します。
2.1. 比較に使用するライブラリ
…使用するライブラリの実装をココで紹介しようと思ったのですが、意外と長くなってしまいました。なので、本記事での紹介は省略します。詳細は、GitHub – CsMySamples/TableReaderに公開していますので、そちらを参考してください。
2.2. 比較で使用するデータ
比較では、以下のようなデータを用意します。
No. | データの内容 |
---|---|
1 |
|
2 |
|
3 |
|
4 |
|
2.3. 比較方法
今回は、上述の各テーブルをそれぞれ100回読み込み、読み込みに要した時間の平均値を測定、比較します。
3. 結果
比較した結果は、以下の通りです。
No | ClosedXML | ExcelDataReader |
---|---|---|
1 | 340 ms | 61 ms |
2 | 339 ms | 65 ms |
3 | 327 ms | 58 ms |
4 | 338 ms | 60 ms |
4. まとめ
今回は、ClosedXMLとExcelDataReaderの性能比較を行ってみました。ただ、既にネット上に溢れているような「一般的な」使い方での性能比較ではなく、「逸般的な」使い方での性能比較でした。
結果は、ExcelDataReaderの方が速いです。結果のテーブルで示した通り、ExcelDataReaderの方が、ClosedXMLよりも5~6倍という結果でした。
やっぱり、C#でのExcelの読出しは、ExcelDataReaderが速い!
ではっ!
ディスカッション
コメント一覧
まだ、コメントがありません