UiPathモダンデザインのExcel読み書きは遅い?
少し前にこんな記事を書きました。
当時、最終的には以下の調査結果にまとめました。
No | 検証結果 | パフォーマンス影響 |
---|---|---|
1 | StudioとStudioXという、ツールの観点では差はない | なし |
2 | Excelの繰り返し(各行)を使用する場合、「Excelプロセススコープ」の「Excelウィンドウを表示」オプションをFalse(可視OFF)にしたほうが早い | 影響小 |
3 | Excelの繰り返し(各行)よりも、繰り返し(データテーブルの各行)のほうが処理速度が早い | 影響大 |
4 | モダンデザイン(Excelプロセススコープ)よりも、クラシックデザイン(Excelアプリケーションスコープ)のほうが処理速度は早い | 影響大 |
うーん、結果は出たものものの、モダンよりもクラシックの方が早いとはどうしたものか。。。少しすっきりしない結果になりました。
その後、ある筋から情報が入りまして、あるプロパティを見直せば、モダンでもクラシック同様に速度は向上するとか。。。
真偽を明らかにすべく、改めて調査を開始したのであります。
タレコミ情報
タレコミがあった内容は、モダンデザインの 「範囲を読み込み(UiPath.Excel.Activities.Business.ReadRangeX)」アクティビティ に関するものです。
・ UiPath.Excel.Activitiesパッケージのバージョンを「2.16.0」以上にする
・「表示行のみ」プロパティのチェックを外す
・「読み込む値の書式」プロパティを「RawValue」に変更する
「範囲を読み込み」アクティビティのデフォルトプロパティを以下のように見直すことでクラシック同等の読み込み速度になるというではないですか。
ふーん。一応「範囲を読み込み(UiPath.Excel.Activities.Business.ReadRangeX)」アクティビティガイドも見てみましょう。
なんか書いてますね。
For better performance, we recommend setting the Read formatting option to RawValue and deselecting the Visible rows only option.
書いていたとしても、多少の速度向上程度では認めないんだから!(誰
調査内容
以下の要領で調査しました。
1.環境:UiPath Studio 2023.4 Windowsプロジェクト 2.処理内容:ダミーの個人情報が記載された1000件(165KB)のExcelデータを読み込み、データテーブル変数に格納するまでの時間を計測 3.「範囲を読み込み」プロパティ、およびその親階層に配置する「Excelファイルを使用」アクティビティのプロパティの設定バリエーション毎に調査
親階層に配置する「Excelファイルを使用」アクティビティにも「読み込む値の書式」というプロパティがあったので、バリエーションに含めて調査をしてみました。
ワークフロー自体はこんな感じのシンプルなやつです。
いざ調査
結果はこちら!!
No | Excelファイルを使用 読み込む値の書式 |
範囲を読み込み 表示行のみ |
範囲を読み込み 読み込む値の書式 |
秒数 | 順位 |
---|---|---|---|---|---|
14 | DisplayValue | False | RawValue | 2.3 | 1位 |
12 | (null) | False | RawValue | 2.7 | 2位 |
13 | Default | False | RawValue | 3.0 | 3位 |
10 | RawValue | False | RawValue | 3.3 | 4位 |
3 | RawValue | True | (null) | 30.7 | 5位 |
7 | RawValue | False | (null) | 32.7 | 6位 |
4 | DisplayValue | True | (null) | 33.7 | 7位 |
8 | DisplayValue | False | (null) | 34.7 | 8位 |
11 | DisplayValue | False | DisplayValue | 37.3 | 9位 |
1 | (null) | True | (null) | 41.0 | 10位 |
5 | (null) | False | (null) | 41.0 | 10位 |
2 | Default | True | (null) | 42.0 | 12位 |
6 | Default | False | (null) | 42.0 | 12位 |
9 | Default | False | Default | 44.7 | 14位 |
もう、解説すら不要な感じになりました😅
気を遣って「Excelファイルを使用」アクティビティもバリエーションに含めたけど全く影響なし。
ただシンプルに以下をチューニングすることで、10倍近い速度が出ました。
・ UiPath.Excel.Activitiesパッケージのバージョンを「2.16.0」以上にする
・「表示行のみ」プロパティのチェックを外す
・「読み込む値の書式」プロパティを「RawValue」に変更する
Excel読み込みは速くなったかもだけど、書き込みとか含めるとクラシックデザインのが断然速いのでしょう?
そんなあなた(わたし)のために調査データを用意してあります!
こちらは以前にExcelパフォーマンス評価をしたときに収集していたけど、細かすぎて公開していなかった情報です。
No | ツール | 種別 | 概要 | 読込秒数 | 転記秒数 | 書込秒数 | 合計秒数 | 順位 |
---|---|---|---|---|---|---|---|---|
2 | Studio | クラシック | Excelアプリケーションスコープ(可視OFF) | 5.323 | 2.408 | 9.004 | 16.735 | 1位 |
1 | Studio | クラシック | Excelアプリケーションスコープ(可視ON) | 8.256 | 2.410 | 14.464 | 25.130 | 2位 |
3 | Studio | モダン | Excelプロセススコープ(可視OFF),データテーブル | 73.436 | 1.456 | 2.148 | 77.040 | 3位 |
6 | StudioX | モダン | Excelプロセススコープ(可視OFF),データテーブル | 80.373 | 5.446 | 2.472 | 88.291 | 4位 |
5 | StudioX | モダン | Excelプロセススコープ(可視OFF),Excelの繰り返し(各行) | 5.575 | - | 93.414 | 98.989 | 5位 |
4 | StudioX | モダン | Excelプロセススコープ(可視ON),Excelの繰り返し(各行) | 6.477 | - | 103.029 | 109.506 | 6位 |
クラシックが圧倒的で、モダンは差を開けられていたのですが、注目いただきたいのはNo3,No6(モダンのデータテーブル利用パターン)の読込処理です。
モダンのデータテーブル利用パターンにおいては、読込処理に時間がかかっていましたが、その後の転記や書き込みはむしろクラシックより速いくらいでした。
まとめ
No | 検証結果 | パフォーマンス影響 |
---|---|---|
1 | StudioとStudioXという、ツールの観点では差はない | なし |
2 | Excelの繰り返し(各行)を使用する場合、「Excelプロセススコープ」の「Excelウィンドウを表示」オプションをFalse(可視OFF)にしたほうが早い | 影響小 |
3 | Excelの繰り返し(各行)よりも、繰り返し(データテーブルの各行)のほうが処理速度が早い | 影響大 |
4 | 影響大 | |
5 | モダンデザインのExcel操作において、データテーブル利用パターン(「範囲を読み込み」アクティビティを使用)で、プロパティを適切にチューニングすれば、クラシックデザインと同等の処理速度が出せる | 影響大 |
No.5のチューニング内容は以下の通りです。デフォルトプロパティと比較し、10倍近い速度が出ました。
・ UiPath.Excel.Activitiesパッケージのバージョンを「2.16.0」以上にする
・「表示行のみ」プロパティのチェックを外す
・「読み込む値の書式」プロパティを「RawValue」に変更する
今回のExcel読み込み速度向上のチューニングを行えば、晴れてモダンデザインのデータテーブル利用パターンはクラシックデザインと比較しても遜色ないか、むしろ速いのでは?というところまで来た といえるのではないでしょうか🚀🔥
もし、StudioXだとExcel複数行処理が遅いのでStudio使ってます~!だったり、クラシックデザイン派です~!とかいう人がいたら、 チューニング次第ではExcel処理のパフォーマンスは改善できるよ! と伝えて下さい!
ただ、StudioXの場合、パフォーマンスをとってデータテーブル利用パターンを選ぶか、易しさをとって「Excelの繰り返し(各行)」を使うかは悩みますし、使う人を選びそうですね🤔
タレコミいただいたUiPath社のTさんありがとうございました!!勉強になりました!