Quelle est la meilleure facon (la plus propre) d’ignorer la sortie dans PowerShell ?
Je viens de faire quelques tests des quatre options que je connais.
Measure-Command {$(1..1000) | Out-Null}
TotalMilliseconds : 76.211
Measure-Command {[Void]$(1..1000)}
TotalMilliseconds : 0.217
Measure-Command {$(1..1000) > $null}
TotalMilliseconds : 0.2478
Measure-Command {$null = $(1..1000)}
TotalMilliseconds : 0.2122
## Controle, les temps varient de 0.21 a 0.24
Measure-Command {$(1..1000)}
TotalMilliseconds : 0.2141
Je vous suggere donc d’utiliser n’importe quoi sauf Out-Null en raison de la surcharge. L’element suivant le plus important, pour moi, serait la lisibilite. J’aime personnellement la redirection vers $null et l’affectation a $null. J’avais l’habitude de preferer la conversion vers [Void], mais cela peut etre moins comprehensible en parcourant le code ou pour les nouveaux utilisateurs.
Je pense que je prefere legerement la redirection de la sortie vers $null.
Do-Something > $null
Edit
Apres le commentaire de stej, j’ai decide de faire d’autres tests avec des pipelines pour mieux isoler la surcharge de la suppression de la sortie.
Voici quelques tests avec un simple pipeline de 1000 objets.
## Controle Pipeline
Measure-Command {$(1..1000) | ?{$_ -is [int]}}
TotalMilliseconds : 119.3823
## Out-Null
Measure-Command {$(1..1000) | ?{$_ -is [int]} | Out-Null}
TotalMilliseconds : 190.2193
## Redirection vers $null
Measure-Command {$(1..1000) | ?{$_ -is [int]} > $null}
TotalMilliseconds : 119.7923
Dans ce cas, Out-Null a environ 60% de surcharge et > $null a environ 0.3% de surcharge.
Addendum 16/10/2017 : J’avais initialement neglige une autre option avec Out-Null, l’utilisation du parametre -inputObject. En utilisant celui-ci, la surcharge semble disparaitre, cependant la syntaxe est differente :
Out-Null -inputObject ($(1..1000) | ?{$_ -is [int]})
Et maintenant quelques tests avec un simple pipeline de 100 objets.
## Controle Pipeline
Measure-Command {$(1..100) | ?{$_ -is [int]}}
TotalMilliseconds : 12.3566
## Out-Null
Measure-Command {$(1..100) | ?{$_ -is [int]} | Out-Null}
TotalMilliseconds : 19.7357
## Redirection vers $null
Measure
(Reponse tronquee)