Mi rendo conto che questo è un vecchio thread, ma per coloro che prendono la risposta accettata di @ JasonMArcher sopra come dato di fatto, sono sorpreso che non sia stato corretto molti di noi hanno saputo per anni che è in realtà la PIPELINE che aggiunge il ritardo e NIENTE da fare con se è Out-Null o no. Infatti, se esegui i test di seguito, vedrai rapidamente che lo stesso casting "più veloce" su [void] e $ void = che per anni abbiamo usato tutti pensando che fosse più veloce, sono in realtà SOLO COME LENTO e in effetti MOLTO LENTO quando aggiungi QUALSIASI pipelining di sorta. In altre parole, non appena si esegue il pipe su qualcosa, l'intera regola di non utilizzare out-null va nel cestino.
Prova, gli ultimi 3 test nell'elenco seguente. L'orribile Out-null era 32339.3792 millisecondi, ma aspetta: quanto più velocemente è stato lanciato su [void]? 34121.9251 ms?!? WTF? Questi sono REAL # sul mio sistema, il casting su VOID era in realtà PIÙ LENTO. Che ne dici di = $ null? 34217.685ms ..... ancora friggin SLOWER! Quindi, come mostrano gli ultimi tre semplici test, Out-Null è in realtà più veloce in molti casi quando la pipeline è già in uso.
Allora, perché? Semplice. È ed è sempre stata un'allucinazione al 100% che le connessioni a Out-Null fossero più lente. È comunque che PIPING TO ANYTHING è più lento e non lo sapevamo già attraverso la logica di base? Potremmo non sapere QUANTO più lentamente, ma questi test sicuramente raccontano una storia sul costo dell'utilizzo della pipeline se puoi evitarlo. E non ci sbagliavamo al 100% perché c'è un numero molto PICCOLO di scenari reali in cui il nulla è male. Quando? Quando si aggiunge Out-Null si aggiunge SOLO l'attività della pipeline. In altre parole .... il motivo è un semplice comando come $ (1..1000) | Out-Null come mostrato sopra ha mostrato vero.
Se aggiungi semplicemente una pipe aggiuntiva a Out-String ad ogni test sopra, i # cambiano radicalmente (o semplicemente incolla quelli qui sotto) e come puoi vedere tu stesso, l'Out-Null diventa in realtà più veloce in molti casi:
$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