ค้นหาเว็บไซต์

คำสั่งการวัด: การเปรียบเทียบความเร็ว (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

บทความที่เกี่ยวข้อง