PowerShell で ClosedXML の単純な動作速度比較

2020/04/18

経緯

先に書いたブログ PowerShell で ClosedXML を使って Excel ファイルを作成する にて、「動作が軽快」と書きましたが体感でしかなかったので、単純に 多くのセルにデータを入れたら速度に差がでるか? というのを試してみたいと思います。

しかし、単純な比較といいなが色々と勉強しながらでした。

特に、一括で貼り付ける方法は「速い」というブログ等は多く目にしましたが、実際にどのようなコードで検証して何と比べて速いのかがまとまっているのは私には見つけられませんでしたので、個人的には今回のサンプルコードがとても大切です。

環境

  • VAIO-Z
    • CPU: Core i7-5557U 3.10 GHz (最大3.40 GHz)
    • Mem: 16GB
    • Storage: 第二世代 ハイスピードSSD(PCI Express x 4 (20 Gb/s))
  • Windows 10
  • PowerShell 5.0
  • ClosedXML 0.76.0
  • Microsoft Open XML Format SDK
  • MS Office 2016

計測方法

Measure-Command を利用して計測する

Measure-Command { ClosedXML_Pattern1.ps1 }

検証項目と結果

一つのシートで、100 X 100 のセルに下記のパターンでデータを入れていく

No. 試験内容 COM Object ClosedXML
1. セル 1 つづつ 10,000 回、データを入れる(装飾なし) 30.4542562 sec 0.699596 sec
2. セル 1 つづつ 10,000 回、文字色を赤、フォントの大きさを 15 のデータを入れる 136.3952091 sec 0.913028 sec
3. 1 行(100 セル) づつ 100 行分、データを入れる(装飾なし) 2.0920194 sec 0.6800917 sec
4. 1 行(100 セル) づつ 100 行分、文字色を赤、フォントの大きさを 15 のデータを入れる 6.8155114 sec 0.8739652 sec
5. 10,000 のセルに一括でデータを入れる(装飾なし) 1.5663538 sec 0.6527399 sec
6. 10,000 のセルに一括で、文字色を赤、フォントの大きさを 15 のデータを入れる 2.1558577 sec 0.8357458 sec
  • 今回検証に使ったコードは GitHub においてあります

考察

xls 縛りとかがないのなら、ClosedXML を使ったほうがよいなというのが私の感想です。

また、少し面倒に感じますが、配列に入れて一気に貼り付けるほうが圧倒的に速いですので、設計段階からこの考えを取り入れていきたいです。