循环

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 是最慢的,但它的管道支持可能很有用,因为它允许你在项目到达时处理(在读取文件,接收数据等时)。这在处理大数据和低内存时非常有用,因为你不需要在处理之前将所有数据加载到内存中。