O PowerShell é um programa escrito em .Net, mas utiliza interfaces para muitos intérpretes e tempos de execução diferentes quando está em execução. É um Shell, assim como o BASH, mesmo que esteja escrito em C, que não diz nada sobre os binários e scripts executados nele. Os executáveis podem ser código .Net, comandos VDM / CMD, comandos shell do * nix, VB / C / WSScript, invocações do WMI, interfaces de API não gerenciadas, arquivos jar ou qualquer outra coisa. Essas opções afetam o desempenho do código em execução no shell, não a linguagem em que o shell está escrito.
Agora, parece que você está tendo dificuldades com a implementação de um comando específico. Portanto, a melhor pergunta é: por que ls
é lento para classificar quando chamado de dentro do PowerShell. Quando nos aprofundamos, descobrimos que ls
é um alias para 'Get-ChildItem' que retorna uma matriz de objetos contendo objetos System.IO.DirectoryInfo.
PS C:\Windows\system32> $x=Get-ChildItem ./
PS C:\Windows\system32> $x.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
PS C:\Windows\system32> $x[1].GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True DirectoryInfo System.IO.FileSystemInfo
PS C:\Windows\system32>
Você pode recuperar o resultado ls
e enviá-lo para uma chamada Sort-Object
e vai se comportar em grande parte da maneira que um IEnumerable faz.
Observe que IEnumerable não faz nada pelo desempenho. Você pode estar confundindo-o com o IQueryable, que define mas não executa uma consulta até o último segundo, presumivelmente depois de ter sido decorado com operações de filtragem e classificação, da maneira como o .Net faz via LinQ to Objects. Nesse caso, como Get-ChildItem não oferece um mecanismo de consulta otimizado ou fonte de dados indexada, você não pode comparar as operações modernas do banco de dados com as listagens de diretório.
Então, finalmente, tente algo como: %código% Para mim, segmentação System32, isso leva cerca de 20 segundos para processar e classificar 54430 arquivos.
Por fim, observe que você recebe um grande impacto no desempenho ao tentar enumerar um diretório ao qual não tem acesso pessoal, por isso, certifique-se de não recorrer a lugares para os quais não tem permissão de ir. sofrer uma espera de 2 + segundos para cada um.
Espero que ajude.