我尝试了一些选项来迭代我的目录,并获得以下命令之间的巨大性能差异:
慢:
Get-ChildItem -Directory -Force -Recurse -Depth 3 -Include '$tf'
快速:
Get-ChildItem -Directory -Force -Recurse -Depth 3 | Where-Object Name -eq '$tf'
有人可以解释一下为什么第一句话比第二句话慢得多吗?
答案 0 :(得分:2)
Get-ChildItem
是一个提供程序cmdlet-这意味着其大部分实际工作已卸载到基础提供程序,在您的情况下可能是FileSystem
提供程序。
提供程序本身实际上并不支持-Include
/ -Exclude
参数,这是cmdlet需要注意的少数事情之一-对于文件系统提供程序来说,这是非常沉重的双重任务-之所以可行,是因为cmdlet需要向下遍历文件系统层次结构来确定它是否需要基于父目录名称应用排除项或包含项,因此可以see how this is implemented here。
因此,通过对文件系统提供程序使用-Include
,您是在要求PowerShell做大量的双重工作。