Tips

進捗バーを表示させた時のパフォーマンス低下防止策

日付2014/04/18
ID14-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)

関連資料