คำสั่งการวัด: การเปรียบเทียบความเร็ว (Foreach กับ Foreach-Object)
Measure-Command วัดระยะเวลาที่คำสั่งหรือสคริปต์ใช้ในการดำเนินการให้เสร็จสิ้น นี่เป็นสิ่งสำคัญอย่างยิ่งในการประมวลผลข้อมูลจำนวนมาก
วัด-คำสั่ง
ในตัวอย่างนี้ ฉันวัดคำสั่ง Get-ChildItem โดยค้นหาไฟล์ทั้งหมดด้วยชื่อไฟล์ Windows
Measure-Command {Get-Childitem -Path c: -File -Recurse -ErrorAction SilentlyContinue | Where-Object Name -eq "Windows"}ใช้เวลาประมาณ 44 วินาที นั่นเร็วมาก ฉันมี SSD
การเปรียบเทียบ
Foreach-วัตถุ
ตอนนี้เรามาวัดคำสั่งอื่นด้วย Foreach-Object:
Measure-Command {0..1000000 | Foreach-Object $_}8 วินาที ไม่เลว.
แต่ละ
ถ้าฉันทำแบบเดียวกันกับ foreach แทนที่จะเป็น Foreach-Object ฉันต้องยอมรับว่าฉันเร็วกว่ามาก
$i=0
Measure-Command {foreach ($i in 0..1000000) {$i++}}
3.5 วินาที Microsoft อธิบายว่าเหตุใดจึงเป็นเช่นนี้:
https://blogs.technet.microsoft.com/heyscriptingguy/2014/07/08/getting-to-know-foreach-and-foreach-object/
บทสรุป
Foreach ใช้หน่วยความจำมากขึ้น แต่เร็วกว่า วัตถุทั้งหมดจะถูกเก็บไว้ในหน่วยความจำ ด้วย Foreach-Object ออบเจ็กต์จะถูกประมวลผลทีละรายการ และผลลัพธ์สำหรับแต่ละออบเจ็กต์ที่ผ่านไปป์จะถูกส่งออกทันที อย่างไรก็ตาม สิ่งที่ฉันชอบคือ Foreach-Object ?
เพิ่มเติม: https://www.pluralsight.com/blog/tutorials/measure-powershell-scripts-speed


