こんにちは、くろがきです。
Igor Proでプログラミングする中で、ある程度大きなマクロを組む際に、グローバル変数とローカル変数の処理速度の違いに興味が湧きました。
一般的には、グローバル変数のほうが処理速度が遅いと言われますが、Igor Proの場合どの程度の違いがあるのでしょうか。
今回の記事では、Igor Proのグローバル変数とローカル変数の処理速度について検証したので、その結果についてまとめていきます。
処理速度を検証する関数
まずは処理速度検証用の関数を作成します。
まずはローカル変数を100万回生成する関数です。
function local_variables()
Variable i, time_start = datetime
for(i=0; i<1000000; i+=1)
Variable var = 0
endfor
Variable time_end = datetime, diff = time_end - time_start
print diff
end
ローカル変数varにゼロを代入することを100万回繰り返します。
次にグローバル変数を100万回生成する関数です。
function global_variables()
Variable i, time_start = datetime
for(i=0; i<1000000; i+=1)
Variable/G g_var = 0
endfor
variable time_end = datetime, diff = time_end - time_start
print diff
end
こちらもグローバル変数g_varをカレントディレクトリに100万回生成します。
実行環境
今回、処理速度比較を行った環境はこちらです。
PC:M2 Macbook Pro 14インチ
ソフト:Igor Pro 9
処理速度の比較
上記の関数を使って出力した結果は下記のとおりでした。
ローカル変数を100万回生成:0.05秒
グローバル変数を100万回生成:100.55秒
グローバル変数のほうが、実に2000倍近くローカル変数より処理速度が遅い結果となりました。
グローバル変数を1000回生成するのにかかる時間は、実測でも大体0.1秒くらいになります。
マクロ起動時に1秒も待つと結構待たされた感があるので、どんなに多くてもグローバル変数は1000個以下ぐらい抑えたいところです。
さらに今回の例では、変数名も固定し、代入した数値もゼロのみでした。
実際のマクロ作成時には、様々な変数名で、より大きな情報量の数値や文字列を代入することになると思います。
そうなるともっと処理速度がかかることになると思います。
いずれにしても、グローバル変数はできる限り使用数を減らしていきたいところです。
まとめ
今回の記事では、Igor Proのグローバル変数とローカル変数の処理速度の違いについて検証しました。
Igor Proではグローバル変数の方がローカル変数より2000倍近く遅い結果となりました。
グローバル変数の処理速度が遅い、と言っても、小規模のマクロであればあまり気になることはないと思ます。
ある程度マクロの規模が大きくなってきたときは、グローバル変数の使いすぎには注意したいところです。
[…] […]