2021年5月5日水曜日

Power Automate Desktopのデバッグモード向け高速化手法

この記事を書き上げて公開する前に、1フローの実行時間を設定するメニューがあることが判明。無意味な記事となりました。Power Automateで釣りができるまでずいぶんチューニングしたのですが意味なかったです。でも、結構時間かけて書きましたのでいちを残しておきます。

-------------------------------------------
 みなさん、Power Automate Desktop使ってますか?先日PADで「Ultimate Fishing Simulator」のRPAをやってみましたが、PADでゲームのRPAをする場合に気を付けたいことをまとめておきたいと思います。端的にはデバッグモード向けの高速化手法です。なんでデバッグモードなの?って話ですが「映え」です。このサイバー感のあるデバッグモードを使わない手はないです。そもそもなんですが、ゲームを遊ぶためではなく自動化の実験をするために買ってますので。。。えっ?

全ての命令の実行に時間がかかる

 当たり前と言えば当たり前ですが、デバッグモードの場合は気になるレベルで時間がかかります。リアルタイムに何かをするフローのデバッグには使えないレベルですが、でも使います。どのぐらいかかるかというとループや判定でも1行につき0.1秒程度かかるようです。いくつかパターンを変えて測定してみたところ、0.12秒~0.14秒/命令となりました。マシンスペックは関係なく、このぐらいのスピードで実行されるよう調整されていると考えています。PADにはオプション等見当たりませんが、レジストリ変更でもいいので調整できるといいんですけどね。
 例として以下を見てください。このループ処理に何秒かかると思いますか?100秒ちょいであってほしいですが136秒かかります。3行の命令がありそれぞれ100回実行されるため、300行処理されますが、その300行の処理に36秒かかるということです。


 次に以下の処理は何秒かかるでしょうか?Loop行とEnd行が20回、Wait行が5×20回となり、140行処理されることになります。ロジック上やっていることは同じですが、実行される行数が半分になりました。結果実行に要する時間は118秒でした。

 ちなみにデバッグモードでなければ、どちらも103秒と普通のスピードで実行されます。

 判定文についても触れておきたいと思います。次の処理にはどれぐらい時間がかかるでしょうか?4行の命令が100回繰り返されるのでだいたいわかりますよね。実測では45秒でした。判定が真となる場合はElse行は処理されないのがポイントです。
 では、先頭行のflagを0以外の値にするとどうなるでしょうか?この場合、Else行が実行されるようになるため5行×100回処理され、実測では56秒でした。

 ポイントとしては、こだわる場所のループ回数は減らす、判定は真となる場合多くなるようにする、となります。

サブフローは使いどころに注意

 もう一度登場します基本形、この処理には136秒かかりました。


 では、1秒のウェイトをサブフロー先に移動させるとどうなるでしょうか?275秒となりました。サブフローの呼び出し1回で1秒以上かかることになります。画面を見ているとサブフローに処理が移る時にタブの切り替え操作的な動きをしているのと、見ていて単純に遅いです。今回のケースでは、ループの中からサブフローを呼び出すのではなく、サブフローの先でループさせると相当早くなりますね。

時間調整は「Wait」ではなく「キーの送信」

 遅延カテゴリにあるWaitは、秒単位でしか待ち時間を指定できません。ですが、1/10秒単位ぐらいで待ち合わせを挟みたいことってありますよね。そんなときはマウスとキーボードカテゴリにある、キーの送信を使います。パラメタに「キー入力の間隔の遅延」と分かりにくい説明ですが、1文字(1キー)入力後の待ち時間をミリ秒単位で指定できるようになっており、Waitよりも細かく調整できます。1文字入力するたびに指定した時間待ち合わせをしますので、n文字入力する場合は指定した遅延時間がn倍になります。「間隔」とありますが1文字の場合でも有効です。ゲームの実行に影響のない特殊キーを選ぶと良いと思います。



0 件のコメント:

コメントを投稿