powershell - powershell 性能:Get-ChildItem -Include 与 Get-ChildItem | Where-对象
问题描述
我尝试了一些选项来迭代我的目录并在以下命令之间获得巨大的性能差异:
慢的:
Get-ChildItem -Directory -Force -Recurse -Depth 3 -Include '$tf'
快速地:
Get-ChildItem -Directory -Force -Recurse -Depth 3 | Where-Object Name -eq '$tf'
有人能解释一下为什么第一个语句比第二个慢得多吗?
解决方案
Get-ChildItem
是一个提供者 cmdlet - 这意味着它的大部分实际工作被卸载到底层提供者,FileSystem
在您的情况下可能是提供者。
提供程序本身实际上并不支持-Include
/-Exclude
参数,这是 cmdlet 需要注意的少数事情之一 - 对于文件系统提供程序来说,这是非常繁重的双重工作,因为 cmdlet 需要通过文件系统向下递归层次结构来确定是否需要基于父目录名称应用排除或包含,您可以在此处查看这是如何实现的。
因此,通过使用-Include
文件系统提供程序,您要求 PowerShell 进行大量的双重工作。