Saya menyadari ini adalah utas lama, tetapi bagi mereka yang menerima jawaban yang diterima @ JasonMArcher di atas sebagai fakta, saya terkejut itu belum diperbaiki banyak dari kita yang tahu selama bertahun-tahun itu sebenarnya adalah PIPELINE yang menambahkan penundaan dan TIDAK ADA hubungannya dengan apakah itu Out-Null atau tidak. Faktanya, jika Anda menjalankan tes di bawah ini, Anda akan dengan cepat melihat bahwa casting "lebih cepat" yang sama ke [void] dan $ void = bahwa selama bertahun-tahun kita semua berpikir bahwa itu lebih cepat, sebenarnya HANYA SEPERTI LAMBAT dan pada kenyataannya SANGAT LAMBAT ketika Anda menambahkan pipelining APAPUN apa pun. Dengan kata lain, segera setelah Anda melakukan pipe ke apa pun, seluruh aturan untuk tidak menggunakan-null masuk ke tempat sampah.
Buktinya, 3 tes terakhir dalam daftar di bawah ini. Out-null yang mengerikan adalah 32339.3792 milidetik, tapi tunggu - seberapa cepatkah casting menjadi [batal]? 34121.9251 ms?!? WTF? Ini adalah # NYATA pada sistem saya, casting ke VOID sebenarnya lebih lambat. Bagaimana dengan = $ null? 34217.685ms ..... masih friggin SLOWER! Jadi, seperti yang ditunjukkan oleh tiga tes sederhana terakhir, Out-Null sebenarnya LEBIH CEPAT dalam banyak kasus ketika pipa sudah digunakan.
Jadi mengapa ini? Sederhana. 100% halusinasi membuat perpipaan ke Out-Null lebih lambat. Namun, PIPING TO ANYTHING lebih lambat, dan bukankah kita semacam sudah tahu itu melalui logika dasar? Kita mungkin saja tidak tahu BAGAIMANA JAUH lebih lambat, tetapi tes ini tentu saja menceritakan tentang biaya menggunakan pipa jika Anda bisa menghindarinya. Dan, kami tidak benar-benar 100% salah karena ada sejumlah skenario benar yang KECIL di mana nol adalah kejahatan. Kapan? Saat menambahkan Out-Null adalah menambahkan aktivitas pipa ONLY. Dengan kata lain .... alasan perintah sederhana seperti $ (1..1000) | Out-Null seperti yang ditunjukkan di atas menunjukkan true.
Jika Anda cukup menambahkan pipa tambahan ke Out-String untuk setiap tes di atas, #s berubah secara radikal (atau cukup tempel yang di bawah) dan seperti yang Anda lihat sendiri, Out-Null sebenarnya menjadi LEBIH CEPAT dalam banyak kasus:
$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