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が速い!
ではっ!






ディスカッション
コメント一覧
まだ、コメントがありません