Foreach与Foreach-Object的性能区别

在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足矣了。

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PowerShell中,ForEach-Object是一个常用的命令,它可以对管道中的每个对象执行相同的操作。你可以通过在ForEach-Object后面使用脚本块{}来定义要执行的操作。在脚本块中,可以使用$_来引用当前正在处理的对象。这样,你就可以对每个对象进行个性化的处理。举个例子,如果你想对一个字符串数组中的每个字符串进行右对齐并用横线填充至10个字符的宽度,可以使用如下命令: "Hello", "World" | ForEach-Object { $_.PadRight(10, "-") }。在这个例子中,$_代表当前正在处理的字符串对象,PadRight方法用于在字符串后面添加指定数量的横线以达到指定的宽度。这样,你就可以通过ForEach-Object命令对每个字符串进行相同的处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Foreach-Object与Where-ObjectPowerShell 3.0中的改动](https://blog.csdn.net/itanders/article/details/7522407)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Powershell ForEach-Object 循环](https://blog.csdn.net/weixin_34185512/article/details/86118603)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值