【问题标题】:powershell performance: Get-ChildItem -Include vs. Get-ChildItem | Where-Objectpowershell 性能:Get-ChildItem -Include 与 Get-ChildItem | Where-对象
【发布时间】:2019-02-17 00:25:50
【问题描述】:

我尝试了一些选项来迭代我的目录并在以下命令之间获得巨大的性能差异:

慢:

Get-ChildItem -Directory -Force -Recurse -Depth 3 -Include '$tf'

快速:

Get-ChildItem -Directory -Force -Recurse -Depth 3 | Where-Object Name -eq '$tf'

谁能解释一下为什么第一个语句比第二个慢很多?

【问题讨论】:

    标签: powershell


    【解决方案1】:

    Get-ChildItem 是一个提供程序 cmdlet - 这意味着它的大部分实际工作被卸载到底层提供程序,在您的情况下可能是 FileSystem 提供程序。

    提供程序本身实际上并不支持 -Include/-Exclude 参数,这是 cmdlet 需要处理的少数事情之一 - 对于文件系统提供程序来说,这是一项繁重的双重工作,因为cmdlet 需要通过文件系统层次结构向下递归以确定是否需要根据父目录名称应用排除或包含,您可以see how this is implemented here

    因此,通过对文件系统提供程序使用 -Include,您要求 PowerShell 进行大量的双重工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-22
      • 1970-01-01
      • 2016-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多