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