ในการเขียนสคริปต์ AutoIt เพื่อสร้างโปรแกรมต่างๆ คุณสามารถเขียนได้หลากหลายรูปแบบ สำหรับโปรแกรมที่มีขนาดเล็กและใช้คำสั่งไม่กี่บรรทัดจะไม่มีปัญหามากนัก แต่หากทำโปรแกรมที่มีความซับซ้อน คำสั่งและรูปแบบการเขียนสคริปต์จะมีความสำคัญมาก เพราะวิธีการเขียนสคริปต์จะส่งผลต่อความเร็วในการทำงานของโปรแกรมอย่างเห็นได้ชัด แล้วเราจะรู้ได้อย่างไรว่า วิธีการเขียนแบบไหนที่ให้ผลลัพธ์ดีกว่า เร็วกว่า ตรงจุดนี้เองที่ต้องใช้วิธีการวัดความเร็วในการทำงานของสคริปต์มาตรวจวัด
วิธีการตรวจวัดความเร็วในการทำงานของสคริปต์ทำได้ง่ายๆ ด้วยอาศัยคำสั่ง 2 คำสั่งคือ
[*] TimerInit() เป็นคำสั่งสำหรับกำหนดจุดเริ่มวัดเวลา เมื่อคุณใช้คำสั่งนี้กระแสเวลา ณ เวลานั้นจะถูกตีตราว่าเป็นจุดเริ่มการวัดเวลา
หมายเหตุ
ต้องเข้าใจตรงนี้ให้ดีก่อนนะครับ ว่ากระแสเวลาดำเนินต่อเนื่องอยู่ตลอดเวลาแม้ว่าเราจะไม่ได้ใช้คำสั่ง TimerInit() ก็ตาม การใช้คำสั่งนี้เพียงแค่เป็นการตีตราสำหรับกำหนดจุดเริ่มเพื่อใช้วัดเท่านั้น เช่น คุณใช้คำสั่งตอน 8 โมงเช้า โปรแกรมก็จะเริ่มวัดเวลาที่ 8 โมงเช้า แต่ก่อนหน้านั้นก็จะเป็นเวลา 7 โมงเช้า 6 โมงเช้า ย้อนกลับไปเรื่อยๆ แต่โปรแกรมจะไม่รับรู้เพราะยังไม่ได้ทำการกำหนดจุดเริ่มนั่นเอง
[*] TimerDiff() เป็นคำสั่งที่ทำการจ้วงเข้าไปในห้วงเวลาที่ไหลผ่าน ณ ปัจจุบัน ผลลัพธ์ที่ได้ออกมาก็จะช่วงเวลาที่แตกต่างระหว่างเวลา ณ จุดเริ่มวัดเวลา กับเวลา ณ ปัจจุบัน ซึ่งผลที่ได้ออกมานั้นจะเป็นตัวเลขหน่วย MS (มิลลิวินาที 1000 = 1 วินาที) ดังนั้นหากคุณต้องการตรวจดูเวลาให้เข้าใจง่ายขึ้น ต้องนำตัวเลขดังกล่าวมาหาร 1000 เพื่อให้ได้ตัวเลขที่เป็นวินาที จากนั้นก็ใช้คำสั่ง round มากำหนดจุดทศนิยม 2 ตำแหน่งหลังตัววินาที
เพื่อให้เข้าใจยิ่งขึ้นลองดูสคริปต์ด้านล่างนี้
$TM=TimerInit() ;เริ่มตันการวัดเวลา ใช้ตัวแปร $TM เป็นตัวอ้างอิง
Sleep(2100) ;หน่วงเวลา 2.1 วินาที
ConsoleWrite("เวลาคือ = "& Round(TimerDiff($TM)/1000,2)&"วินาที"&@LF)
ผลลัพธ์ที่ได้เมื่อรันสคริปต์นี้คือ 2.1 วินาที และถ้าเปลี่ยนสคริปต์อีกโดยเพิ่มการหน่วงเวลาอีก 1 วินาที เป็น
$TM=TimerInit() ;เริ่มตันการวัดเวลา ใช้ตัวแปร $TM เป็นตัวอ้างอิง
Sleep(2100) ;หน่วงเวลา 2.1 วินาที
ConsoleWrite("เวลาคือ = "& Round(TimerDiff($TM)/1000,2)&"วินาที"&@LF)
Sleep(1000) ;หน่วงเวลา 1.0 วินาที
ConsoleWrite("เวลาคือ = "& Round(TimerDiff($TM)/1000,2)&" วินาที"&@LF)
ผลลัพธ์แรกจะเป็น 2.1 วินาที ผลลัพธ์ที่สองก็จะเป็น 3.1 วินาที ดังภาพด้านล่างนี้ จะเห็นได้ว่าทุกครั้งที่ใช้คำสั่ง TimerDiff() เวลาจะเดินไปเรื่อย ไม่ได้ขึ้นอยู่กับว่าคุณเคยใช้คำสั่ง TimerDiff() ก่อนหน้านั้นหรือไม่ ดังนั้นหากต้องการวัดเวลาการทำงานของสคริปต์ คุณต้องใช้คำสั่ง TimerInit() ก่อนเริ่มต้นสคริปต์นั้นทุกครั้ง เพื่อให้การวัดเวลาเริ่มต้นใหม่อีกครั้ง
เริ่มทดสอบความเร็วของสคริปต์ ตัวอย่างที่ 1
สำหรับตัวอย่างการทดสอบความเร็วสคริปต์ ผมจะยกตัวอย่างการใช้คำสั่ง ตัวดำเนินการกำหนดค่า (assignment operators) ที่เขียนแบบ $a += $i มาเทียบกับการใช้คำสั่ง $a = $a + $i ดูว่าแบบไหนจะทำงานได้เร็วกว่ากัน และเนื่องจากการทำงานของสคริปต์จะเร็วมากจึงไม่ต้องแปลงผลลัพธ์เป็นวินาที คุณลองเอาคำสั่งด้านล่างนี้ไปทดสอบดูครับว่าแบบไหนเร็วกว่ากัน
$a =0
$TM=TimerInit() ;เริ่มตันการวัดเวลา ใช้ตัวแปร $TM เป็นตัวอ้างอิง
for $i = 1 to 1000
$a = $a + $i
Next
ConsoleWrite(" a มีค่าเท่ากับ = "&$a&""&@LF)
ConsoleWrite("เวลาในทำงานของสคริปต์ลำดับ 1 = "& TimerDiff($TM)&" ms"&@LF)
$a =0
$TM2=TimerInit() ;เริ่มตันการวัดเวลา ใช้ตัวแปร $TM2 เป็นตัวอ้างอิง
for $i = 1 to 1000
$a += $i
Next
ConsoleWrite(" a มีค่าเท่ากับ = "&$a&""&@LF)
ConsoleWrite("เวลาในทำงานของสคริปต์ลำดับ 2 = "&TimerDiff($TM2)&" ms"&@LF)
เริ่มทดสอบความเร็วของสคริปต์ ตัวอย่างที่ 2
อีกตัวอย่างหนึ่งเป็นการทดสอบการวนลูป 10000 รอบระหว่างการใช้คำสั่ง For และ While เพื่อดูว่าคำสั่งไหนใช้เวลาในการวนลูปน้อยกว่ากัน อย่างไรก็ตามคำสั่งทั้ง 2 นี้ จะเป็นการวนลูปในสคริปต์เหมือนกัน แต่ก็ต้องคำนึงถึงการนำไปใช้ตามสถานะการณ์ที่เราต้องใช้เขียนโปรแกรม ไม่ใช่ว่าเห็นคำสั่งไหนเร็วกว่าก็ใช้คำสั่งนั้น ทั้งๆ ที่นำมาใช้แล้วยุ่งยากกว่า
$a =0
$TM=TimerInit() ;เริ่มตันการวัดเวลา ใช้ตัวแปร $TM เป็นตัวอ้างอิง
For $i = 1 to 10000
$a +=1
Next
ConsoleWrite(" a มีค่าเท่ากับ = "&$a&""&@LF)
ConsoleWrite("เวลาในทำงานของสคริปต์ลำดับ 1 = "& TimerDiff($TM)&" ms"&@LF)
$a =0
$TM2=TimerInit() ;เริ่มตันการวัดเวลา ใช้ตัวแปร $TM2 เป็นตัวอ้างอิง
While $a < 10000
$a +=1
WEnd
ConsoleWrite(" a มีค่าเท่ากับ = "&$a&""&@LF)
ConsoleWrite("เวลาในทำงานของสคริปต์ลำดับ 2 = "&TimerDiff($TM2)&" ms"&@LF)
###จบแล้วครับ###
Subscribe to:
Post Comments (Atom)
ต้องการรู้วิธีเขียนสคิปซ์ AutoIt ให้กำหนดเวลาการใช้งานเวอร์ชั่นทดลอง
ReplyDeleteอธิบายโดยยกตัวอย่าง ง่ายๆ เช่น ผมปล่อยตัวโปรแกรมเวอร์ชั่นทดลองให้ใช่กันก่อนฟรีๆ 7 วัน เมื่อคบกำหนดการใช้งาน 7วัน เมื่อตัวลูกค้าจะเข้าใช้งานตัวโปรแกรมก็จะไม่สามารถ เข้าใช้งานตัวโปรแกรมได้ เป็นต้น **จบcomment**