Je me rends compte que c'est un vieux fil de discussion, mais pour ceux qui prennent la réponse acceptée de @ JasonMArcher ci-dessus comme un fait, je suis surpris que cela n'ait pas été corrigé, beaucoup d'entre nous savent depuis des années que c'est en fait le PIPELINE ajoutant le retard et RIEN à voir avec si c'est Out-Null ou pas. En fait, si vous exécutez les tests ci-dessous, vous verrez rapidement que le même casting "plus rapide" vers [void] et $ void = que pendant des années nous avons tous utilisé en pensant que c'était plus rapide, sont en fait JUSTE COMME LENT et en fait TRÈS LENT quand vous ajoutez N'IMPORTE QUELLE pipelining. En d'autres termes, dès que vous dirigez vers quelque chose, toute la règle de ne pas utiliser out-null va à la poubelle.
Preuve, les 3 derniers tests de la liste ci-dessous. L'horrible Out-null était de 32339,3792 millisecondes, mais attendez - à quel point le lancement de [void] était-il beaucoup plus rapide? 34121,9251 ms?!? WTF? Ce sont de VRAIS # sur mon système, la diffusion vers VOID était en fait PLUS LENTE. Que diriez-vous = $ null? 34217.685ms ..... encore plus lent! Ainsi, comme le montrent les trois derniers tests simples, l'Out-Null est en fait PLUS RAPIDE dans de nombreux cas lorsque le pipeline est déjà utilisé.
Alors, pourquoi est-ce? Facile. C'est et a toujours été à 100% une hallucination que la tuyauterie vers Out-Null était plus lente. C'est cependant que PIPING TO RIEN est plus lent, et ne le savions-nous pas déjà grâce à la logique de base? Nous ne savons peut-être pas COMBIEN plus lentement, mais ces tests racontent certainement une histoire sur le coût d'utilisation du pipeline si vous pouvez l'éviter. Et nous n'avions pas vraiment tort à 100% car il y a un très petit nombre de vrais scénarios où out-null est mauvais. Quand? Lors de l'ajout d'Out-Null, vous ajoutez la SEULE activité de pipeline. En d'autres termes .... la raison pour laquelle une commande simple comme $ (1..1000) | Out-Null comme indiqué ci-dessus a montré vrai.
Si vous ajoutez simplement un tube supplémentaire à Out-String à chaque test ci-dessus, les #s changent radicalement (ou collez simplement ceux ci-dessous) et comme vous pouvez le voir par vous-même, Out-Null devient en fait PLUS RAPIDE dans de nombreux cas:
$GetProcess = Get-Process
# Batch 1 - Test 1
(Measure-Command {
for ($i = 1; $i -lt 99; $i++)
{
$GetProcess | Out-Null
}
}).TotalMilliseconds
# Batch 1 - Test 2
(Measure-Command {
for ($i = 1; $i -lt 99; $i++)
{
[void]($GetProcess)
}
}).TotalMilliseconds
# Batch 1 - Test 3
(Measure-Command {
for ($i = 1; $i -lt 99; $i++)
{
$null = $GetProcess
}
}).TotalMilliseconds
# Batch 2 - Test 1
(Measure-Command {
for ($i = 1; $i -lt 99; $i++)
{
$GetProcess | Select-Object -Property ProcessName | Out-Null
}
}).TotalMilliseconds
# Batch 2 - Test 2
(Measure-Command {
for ($i = 1; $i -lt 99; $i++)
{
[void]($GetProcess | Select-Object -Property ProcessName )
}
}).TotalMilliseconds
# Batch 2 - Test 3
(Measure-Command {
for ($i = 1; $i -lt 99; $i++)
{
$null = $GetProcess | Select-Object -Property ProcessName
}
}).TotalMilliseconds
# Batch 3 - Test 1
(Measure-Command {
for ($i = 1; $i -lt 99; $i++)
{
$GetProcess | Select-Object -Property Handles, NPM, PM, WS, VM, CPU, Id, SI, Name | Out-Null
}
}).TotalMilliseconds
# Batch 3 - Test 2
(Measure-Command {
for ($i = 1; $i -lt 99; $i++)
{
[void]($GetProcess | Select-Object -Property Handles, NPM, PM, WS, VM, CPU, Id, SI, Name )
}
}).TotalMilliseconds
# Batch 3 - Test 3
(Measure-Command {
for ($i = 1; $i -lt 99; $i++)
{
$null = $GetProcess | Select-Object -Property Handles, NPM, PM, WS, VM, CPU, Id, SI, Name
}
}).TotalMilliseconds
# Batch 4 - Test 1
(Measure-Command {
for ($i = 1; $i -lt 99; $i++)
{
$GetProcess | Out-String | Out-Null
}
}).TotalMilliseconds
# Batch 4 - Test 2
(Measure-Command {
for ($i = 1; $i -lt 99; $i++)
{
[void]($GetProcess | Out-String )
}
}).TotalMilliseconds
# Batch 4 - Test 3
(Measure-Command {
for ($i = 1; $i -lt 99; $i++)
{
$null = $GetProcess | Out-String
}
}).TotalMilliseconds