迴圈

foreach

在 PowerShell 中執行 foreach 迴圈有多種方法,它們都有自己的優點和缺點:

好處 缺點
Foreach 宣告 最快的。最適合靜態集合(儲存在變數中)。 沒有管道輸入或輸出
ForEach() 方法 Foreach-Object 相同的指令碼塊語法,但速度更快。最適合靜態集合(儲存在變數中)。支援管道輸出。 不支援管道輸入。需要 PowerShell 4.0 或更高版本
Foreach-Object(cmdlet) 支援管道輸入和輸出。支援開始和結束指令碼塊,用於初始化和關閉連線等。最靈活的解決方案。 最慢

效能

$foreach = Measure-Command { foreach ($i in (1..1000000)) { $i * $i } }
$foreachmethod = Measure-Command { (1..1000000).ForEach{ $_ * $_ } }
$foreachobject = Measure-Command { (1..1000000) | ForEach-Object { $_ * $_ } }

"Foreach: $($foreach.TotalSeconds)"
"Foreach method: $($foreachmethod.TotalSeconds)"
"ForEach-Object: $($foreachobject.TotalSeconds)"

Example output:

Foreach: 1.9039875
Foreach method: 4.7559563
ForEach-Object: 10.7543821

儘管 Foreach-Object 是最慢的,但它的管道支援可能很有用,因為它允許你在專案到達時處理(在讀取檔案,接收資料等時)。這在處理大資料和低記憶體時非常有用,因為你不需要在處理之前將所有資料載入到記憶體中。