在PowerShell中有两个从字面上看非常相似的语句就是Foreach与Foreach-Object了,那么多这两个语句之间除了写法不同,性能上哪个更快呢下面写同时让这两个语句处理10万个对象,在去计算它们所消耗的时间。
function Foreach_test
{
foreach($i in 1..100000)
{
$i
}
}
function Foreach_Object_test
{
1..100000|ForEach-Object{$_}
}
Write-Host "Foreach-Object Statement: $(Measure-Command{Foreach_Object_test}|%{$_.TotalMilliseconds}) Milliseconds"
Write-Host "Foreach Statement: $(Measure-Command{Foreach_test}|%{$_.TotalMilliseconds}) Milliseconds"
Write-Host "============================"
Write-Host "Foreach-Object Statement: $(Measure-Command{Foreach_Object_test}|%{$_.TotalMilliseconds}) Milliseconds"
Write-Host "Foreach Statement: $(Measure-Command{Foreach_test}|%{$_.TotalMilliseconds}) Milliseconds"
Write-Host "============================"
Write-Host "Foreach-Object Statement: $(Measure-Command{Foreach_Object_test}|%{$_.TotalMilliseconds}) Milliseconds"
Write-Host "Foreach Statement: $(Measure-Command{Foreach_test}|%{$_.TotalMilliseconds}) Milliseconds"
Write-Host "============================"

根据结果,我们可以发现foreach的效率速度远远快于foreach-object,整整相差了200多倍。
foreach(){}
要在同一次聚集所有的对象,所以需要足够多的内存
foreach-object
每次只读写一个对象所以只需要极少的内存存储。
不过最终无论使用哪个都可以,这完全着眼于手边的解决方案而定。一般数量的执行使用foreach足矣了。
本文通过实验对比了PowerShell中Foreach与Foreach-Object两种遍历方式的性能差异。结果显示,在处理大量数据时,Foreach的效率远高于Foreach-Object,两者相差约200倍。此外还解释了这两种遍历方式在内存使用上的区别。
1092

被折叠的 条评论
为什么被折叠?



