适用于PowerShell 3.0或者更高版本
在PowerShell3.0以后,引入了一个新功能,被称为“自动展开”。有了它的支持,你可以这样写代码:
(Get-ChildItem -Path $env:windir\system32 -Filter *.dll).VersionInfo
这行代码会将System32 子目录下的所有的dll的的版本信息返回,在“自动展开”功能尚未诞生以前,你可能必须写一个循环,才能达到类似的效果:
Get-ChildItem -Path $env:windir\system32 -Filter *.dll | ForEach-Object { $_.VersionInfo }
运行这两个例子,结果确实相同,但是显然“自动展开”的写法更简洁。它执行时可能卡一小会,才能看到结果,第一个例子中的代码可能会卡10秒钟,你能才看到结果。而第二个例子中的经典写法却几乎可以迅速看到结果。
其实它们的整体性能有所差异,第一个例子中的“自动展开”的写法,就好比这样:
$data = Get-ChildItem -Path $env:windir\system32 -Filter *.dll Foreach ($element in $data) { $element.VersionInfo }
总结:自动展开的写法固然灵活,但是经典的循环可以带来更高的执行效率。
荔非苔注:其实自动展开,明显偷梁换柱,把可能的流模式管道转换成了顺序模式,在处理海量数据时,不推荐使用。
原文链接:Automatic Unrolling and Memory Consumption
本文链接: https://www.pstips.net/automatic-unrolling-and-memory-consumption.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!