進捗バーを表示させた時のパフォーマンス低下防止策
日付 | 2014/04/18 |
---|---|
ID | 14-003 |
バージョン | 13 |
プラットフォーム | Win, Mac |
進捗バーはとても便利なコンポーネントですが、ループ中に進捗バーの更新を行うと処理のパフォーマンスが低下することがあります。進捗バーは別プロセスで動作するので、進捗バーの更新にはプロセス間通信が使われているからです。
プロセス間通信をループステップで毎回行うことは、好ましい結果を得られないかもしれません。そのような時には、適度な間隔で進捗バーを更新するテクニックを使います。
次の例題コードは、$interval変数にセットされた値によって、間隔を開けて進捗バーを更新しています。
//ループする回数 $max:=1234 //更新間隔 $interval:=11 //頻繁に更新すると遅くなるので本例では11回に1度更新 //進捗ダイアログを表示 $prog:=Progress New Progress SET TITLE($prog; "進捗バーの更新例") //分母表示は予めテキスト化しておくと計算負荷が減る $denominator:="/"+String($max) //ループ処理の開始 For ($i; 1; $max) //進捗状況を表示 If (($i%$interval)=1) Progress SET PROGRESS($prog; $i/$max; "進捗状況:"+String($i)+$denominator) End if //↓本来の処理の代わり DELAY PROCESS(Current process; 1) //↑本来の処理の代わり End for //進捗ダイアログを表示 Progress QUIT($prog)
関連資料