2008-08-04

フロントパネル更新を高速にする

LabVIEW のメリットのひとつは GUI や GUI がらみのプログラミングが手軽だということでしょう。ですが、手軽さの代償としてパフォーマンスが犠牲になっています。



添付の bad.vi は、フロントパネル上のオブジェクトを表示したり、非表示したりします。これを遅いとするか速いとするかは、PC のスペックと、アプリケーション

の要件によるでしょう。



LabVIEW はフロントパネルのオブジェクトの値やプロパティが変更されたとき、自動的に更新します。メインのスレッドと、GUI のスレッドが定期的に通信して、値の変更を反映するからです。もしも多数のオブジェクトがある場合には、この変更通信が頻繁に起こり、その結果、再描画も頻繁に起こります。これが LabVIEW の GUI が遅くなりがちな理由です。



.NET フレームワークの Form オブジェクトは、明示的に Update メソッドを呼び出さないと更新されません。なのでパフォーマンスはよいでしょうが、頻繁に更新してほしいときにはコードが煩雑になりがちです。たぶん。



LabVIEW ではフロントパネルの「パネルアップデートを延期」プロパティを使って同じことができます。このプロパティを True にすると、それ以降フロントパネルの操作が描画に反映されません。False にすると、それまでに発生しているプロパティや値の変更が描画に反映されます。つまり .NET Form オブジェクトの Update メソッドに該当します。



添付の good.vi はそれを実装したもの、better.vi はフロントパネル操作をサブ VI 化したものです。手元の環境では、bad.vi の2倍くらい高速に動作します。



PanelUpdating85.zipをダウンロード