進捗バーを表示させた時のパフォーマンス低下防止策
日付 | 2014/04/18 |
---|---|
ID | 14-003 |
バージョン | 13 |
プラットフォーム | Win, Mac |
進捗バーはとても便利なコンポーネントですが、ループ中に進捗バーの更新を行うと処理のパフォーマンスが低下することがあります。進捗バーは別プロセスで動作するので、進捗バーの更新にはプロセス間通信が使われているからです。
プロセス間通信をループステップで毎回行うことは、好ましい結果を得られないかもしれません。そのような時には、適度な間隔で進捗バーを更新するテクニックを使います。
次の例題コードは、$i_intv変数にセットされた値によって、間隔を開けて進捗バーを更新しています。
//ループの回数 C_LONGINT($i_cnt;$i_max) $i_max:=(Random%501)+100 //進捗バーを更新する間隔 C_LONGINT($i_intv) $i_intv:=18 // // // // // // // // // // // // // // // // // // // // // // // // // //進捗バーの表示準備 C_LONGINT($ref_bar) $ref_bar:=Progress New Progress SET TITLE ($ref_bar;"ループ処理中") Progress SET PROGRESS ($ref_bar;1/$i_max) Progress SET MESSAGE ($ref_bar;"1/"+String($i_max)+" 実行中") //ループ処理の開始 For ($i_cnt;1;$i_max) //プロセス間通信を減らしつつ進捗バーを更新 If (($i_cnt%$i_intv)=0) Progress SET PROGRESS ( $ref_bar ; $i_cnt/$i_max) Progress SET MESSAGE ($ref_bar;String($i_cnt)+"/"+String($i_max)+" 実行中") End if //何かの処理の代わりに待機 DELAY PROCESS(Current process;1) End for //進捗バーの表示終了 Progress QUIT ($ref_bar)
関連資料