入社して2ヶ月が経ちました、最近は毎日Power Automateを触っています。小倉です。
今回はPower Automateの「Apply to each」と「Do until」のどちらが処理速度が速いのか検証してみたいと思います。
検証内容
「1から1000までの整数の和を求める」フローを5回ずつ実行し、実測値の平均を比較する
(まぁこのくらいの計算なら人間でも一瞬で出来ると7歳のガウス先生は仰っていますが…
今回は検証のためこのような簡素なフローにしました)
ちなみに1から1000までの和は500500です。
Apply to eachの場合
フローは以下のようになります。
(Do untilでは変数の加算処理が2つあるので条件を合わせるためにわざと0を足す処理を加えています。1から1000までの整数の和を1ずつ加算して求めるだけなら、その処理を消すことで処理時間の高速化が見込めます。)
実行結果はこちらです!
回数 | 1 | 2 | 3 | 4 | 5 | 平均 |
処理時間 | 3分46秒 | 4分52秒 | 4分21秒 | 3分41秒 | 3分24秒 | 4分1秒 |
平均は約4分、思っていたより実測値がばらついたので何回か測定したのは正解ですね。
では、Do Untilの場合を見てみましょう。
Do untilの場合
フローは以下のようになります。
(Do untilのループ制限がデフォルトで60に設定されているのでそこの変更を忘れずに!)
実行結果はこちらです!
回数 | 1 | 2 | 3 | 4 | 5 | 平均 |
処理時間 | 5分39秒 | 4分58秒 | 5分1秒 | 5分27秒 | 5分6秒 | 5分14秒 |
平均は5分14秒、Apply to eachより1分13秒の処理時間が必要になりました。
まとめ
今回の検証ではApply to eachのほうが処理速度が速いという結果になりました。
Apply to eachではDo untilに比べ1/4~1/5の時間を短縮しています。
もし、Apply to each でも Do untilでも実装できるけど、どちらを使えばよいか悩んだときはApply to each を選んでみると良いかもしれません。
おまけ ~Apply to each に本気を出させる~
Apply to eachは並列処理することができます。並列処理をするとループ内の処理を同時に行うことができます。
方法
Apply to eachの設定から
コンカレンシー制御をオンにしてください。これによって並列処理になります。
並列処理の次数を大きくすればするほど、処理が速くなります。
その結果はこちらです。(並列処理の次数=50)
回数 | 1 | 2 | 3 | 4 | 5 | 平均 |
処理時間 | 0分37秒 | 0分30秒 | 0分36秒 | 0分27秒 | 0分34秒 | 34.4秒 |
速い!!オフの時と比べて段違いに速くなってます。
もしも順序が関係ない処理などの並列処理が可能な場合はコンカレンシー制御をオンにすると良いと思います。
ではこれにて失礼します。