PowerShellのループカウント

PowerShell (v1.0で検証) では、for 文を用いたループカウントより、foreach 文を用いたループカウントの方が、処理速度が上っぽいです。検証用の一行スクリプトを例示すると、


#for を用いたループカウント

[long]$sum=0;$t_start=(Get-Date);for([int]$i=1;$i -le 100000;++$i){$sum+=$i;};((Get-Date)-$t_start).TotalSeconds


上記よりも、


#foreachを用いたループカウント

[long]$sum=0;$t_start=(Get-Date);foreach($i in 1..100000){$sum+=$i;};((Get-Date)-$t_start).TotalSeconds


とした方が時間がかかりません。

しかも、カウンタ変数を、シェルやスクリプトのどこかでそれ以前に、[int]以外の型、例えば [double] 型などにしていて、それをそのまま使ってしまうと、for 文ではそのまま [double] として扱われ続けますが、foreach 文だと、ちゃんと[int]型として参照するので、不意のパフォーマンスダウンも避けられます。

ちなみに、foreach 文で使われた参照変数は、その後に何かを代入すると、もともと宣言されていた型に戻ります。

例えば、


[double]$a=0.0
foreach($a in 1..10){}

$a.GetType()
#ここでは Int32 型([int]型と同じ)と出る

$a = [int]1 #念入りに強制[int]型キャストで代入してみる
$a.GetType()
#ここでは Double 型と出る

[PR]

インターネット広告の「トランスメディア」提供スキンアイコン by mikamikanamiyuki | 2008-08-08 19:48 | プログラミング

<< PowerShellのカレント...