ความเร็วการทำงานของซอฟต์แวร์จะต้องอยู่ในช่วงที่ผู้ใช้ยอมรับได้ บ่อยครั้ง การปรับปรุงความเร็วของรูทีนที่มีอายุการใช้งานสั้นแต่ใช้บ่อยจะช่วยเพิ่มความเร็วโดยรวมของซอฟต์แวร์ได้อย่างมาก
แน่นอนว่าในการปรับปรุงความเร็ว คุณต้องสามารถวัดเวลาได้ก่อน เอาล่ะ ลองพิจารณาสถานการณ์ในสนามดู ทันทีที่เสียงปืนดังขึ้น ให้กดนาฬิกาจับเวลาเพื่อเริ่มจับเวลา และสิ้นสุดการจับเวลาเมื่อผู้เล่นถึงเส้นชัย ในเวลานี้ คุณจะทราบเวลาที่ผู้เล่นใช้ . ก่อนเริ่มรอบถัดไป นาฬิกาจับเวลาจะต้องรีเซ็ตเป็นศูนย์ .NET2.0 ยังมีนาฬิกาจับเวลา: คลาสนาฬิกาจับเวลา ซึ่งสามารถวัดเวลาได้แม่นยำยิ่งขึ้น
ทดสอบความเร็ว:
ประสิทธิภาพของซอฟต์แวร์และความสามารถในการทดสอบเป็นหัวข้อที่ซับซ้อน การตรวจสอบให้แน่ใจว่าแอปพลิเคชันตรงตามความคาดหวังของผู้ใช้นั้นจำเป็นต้องคำนึงถึงประสิทธิภาพและความสามารถในการทดสอบในระหว่างวงจรการพัฒนา นี่เป็นสิ่งสำคัญในระหว่างขั้นตอนการออกแบบ การออกแบบที่ไม่ดีเกือบจะนำไปสู่ประสบการณ์การใช้งานที่ไม่ดีอย่างแน่นอน อย่างไรก็ตาม การออกแบบที่ดีเพียงอย่างเดียวไม่ได้รับประกันว่าโปรแกรมจะทำงานอย่างมีประสิทธิภาพ คุณภาพของโค้ดขั้นสุดท้ายก็มีความสำคัญไม่แพ้กัน
การวัดกิจวัตรที่ใช้เวลานานนั้นค่อนข้างง่าย หากกระบวนการหนึ่งกินเวลาหลายนาที คุณสามารถใช้นาฬิกาเพื่อบันทึกเวลาได้ ตัวอย่างเช่น สำหรับกระบวนการที่ใช้เวลาดำเนินการสองนาที การปรับปรุง 10% สามารถประหยัดเวลาได้ 12 วินาที ซึ่งง่ายต่อการระบุ
และถ้าคุณต้องการวัดกระบวนการระยะสั้นมาก คุณต้องพิจารณาความแม่นยำที่ดีกว่า ตัวอย่างเช่น มีกิจวัตรเล็กๆ น้อยๆ บางอย่างที่อาจใช้เวลาเพียงเสี้ยววินาทีในการรัน แต่จะถูกเรียก 1 ล้านครั้ง ผลสะสมนั้นชัดเจน ในเฟรมเวิร์ก .NET เวอร์ชันก่อนหน้า คุณต้องใช้ฟังก์ชัน Windows API และใน .NET Framework 2.0 Microsoft ได้เปิดตัวคลาส Stopwatch (ซึ่งเป็นนาฬิกาจับเวลาของเรา) เพื่อลดความซับซ้อนของงานการวัดเวลา
คลาสนาฬิกาจับเวลา:
การใช้คลาสนาฬิกาจับเวลาเพื่อวัดเวลานั้นง่ายมาก เช่นเดียวกับนาฬิกาจับเวลาในชีวิตจริง วัตถุในคลาสนี้สามารถเริ่ม หยุด และกลับไปที่ศูนย์ (รีเซ็ต) ตัวนับได้ แต่จะแม่นยำกว่านาฬิกาจับเวลาทั่วไปมาก โดยสามารถแม่นยำถึงไมโครวินาที (ซึ่งก็คือล้านวินาที) . เศษของวินาที)
รหัสตัวอย่าง:
เพื่อสาธิตการใช้งาน Stopwatch ลองใช้โค้ดบางส่วนกัน นี่คือแอปพลิเคชันคอนโซลที่สะสมจำนวนเต็มทั้งหมดระหว่าง 1 ถึง 1 ล้าน:
ใช้ระบบ
เนมสเปซ StopWatchClass
-
โปรแกรมชั้นเรียน
-
โมฆะคงที่หลัก (สตริง [] args)
-
รวมยาว = 0;
สำหรับ (int i = 1; i <= 10000000; i++)
-
รวม += ฉัน;
-
-
-
-
เพิ่มวัตถุนาฬิกาจับเวลา:
คลาสนาฬิกาจับเวลาอยู่ในเนมสเปซ System.Diagnostics นี่คือรหัสหลังจากเพิ่มวัตถุ:
ใช้ระบบ;
ใช้ System.Diagnostics;
StopWatchClass เนมสเปซ
-
โปรแกรมชั้นเรียน
-
โมฆะคงที่หลัก (สตริง [] args)
-
ตัวจับเวลานาฬิกาจับเวลา = นาฬิกาจับเวลาใหม่ ();
รวมยาว = 0;
สำหรับ (int i = 1; i <= 10000000; i++)
-
รวม += ฉัน;
-
-
-
-
ควบคุมวัตถุนาฬิกาจับเวลา:
นาฬิกาจับเวลามีหลายวิธีในการควบคุมวัตถุนาฬิกาจับเวลา วิธีการเริ่มจะเริ่มการดำเนินการจับเวลา และวิธีการหยุดจะหยุดการจับเวลา ในเวลานี้ หากใช้วิธีเริ่มต้นเป็นครั้งที่สอง การกำหนดเวลาจะดำเนินต่อไป และผลลัพธ์ของการจับเวลาสุดท้ายคือการสะสมของการกำหนดเวลาทั้งสอง เพื่อหลีกเลี่ยงสถานการณ์นี้ ให้ใช้วิธีการรีเซ็ตเพื่อรีเซ็ตวัตถุให้เป็นศูนย์ก่อนตัวจับเวลาที่สอง ไม่มีวิธีใดในสามวิธีนี้ที่ต้องการพารามิเตอร์ รหัสคือ:
ใช้ระบบ;
ใช้ System.Diagnostics;
StopWatchClass เนมสเปซ
-
โปรแกรมชั้นเรียน
-
โมฆะคงที่หลัก (สตริง [] args)
-
ตัวจับเวลานาฬิกาจับเวลา = นาฬิกาจับเวลาใหม่ ();
รวมยาว = 0;
timer.Start ();
สำหรับ (int i = 1; i <= 10000000; i++)
-
รวม += ฉัน;
}
จับเวลา หยุด();
-
-
-
อ่านผลลัพธ์นาฬิกาจับเวลา:
<!--[if !supportLists]--><!--[endif]--> หลังจากสิ้นสุดการกำหนดเวลา ขั้นตอนต่อไปคือการอ่านผลลัพธ์ของการกำหนดเวลา คลาส Stopwatch มีคุณสมบัติดังต่อไปนี้:
<!--[ถ้า !supportLists]--><!--[สิ้นสุด]--><!--[ถ้า !supportLists]--><!--[สิ้นสุด]-->
ที่ผ่านไป: ส่งกลับวัตถุ TimeSpan ซึ่งแสดงถึงช่วงเวลา
มิลลิวินาทีที่ผ่านไป: ส่งกลับจำนวนไมโครวินาทีที่ผ่านไปตามเวลานั้น ความแม่นยำจะน้อยกว่าเล็กน้อย ซึ่งเหมาะสำหรับการจับเวลาที่นานขึ้นเล็กน้อย
ElapsedTicks: ส่งกลับจำนวนเห็บตัวจับเวลาที่ผ่านไป ขีดจับเวลาเป็นหน่วยวัดที่เล็กที่สุดเท่าที่จะเป็นไปได้สำหรับวัตถุนาฬิกาจับเวลา ความยาวของเครื่องหมายจับเวลาถูกกำหนดโดยคอมพิวเตอร์และระบบปฏิบัติการเฉพาะ ค่าของฟิลด์ความถี่คงที่ของวัตถุนาฬิกาจับเวลาแสดงถึงจำนวนขีดของตัวจับเวลาที่มีอยู่ในหนึ่งวินาที สังเกตความแตกต่างในหน่วยเวลาที่ใช้โดยคุณสมบัติ Ticks ของ TimeSpan
ควรเลือกคุณสมบัติอย่างใดอย่างหนึ่งเหล่านี้ตามงานกำหนดเวลา ในโปรแกรมตัวอย่างของเรา คุณสมบัติ Elapsed ให้ความแม่นยำที่จำเป็นในการส่งออกจำนวนไมโครวินาทีที่ผ่านไป นี่เป็นความแม่นยำสูงสุดของ TimeSpan
นี่คือรหัสโปรแกรมสุดท้าย:
ใช้ระบบ;
ใช้ System.Diagnostics;
StopWatchClass เนมสเปซ
-
โปรแกรมชั้นเรียน
-
โมฆะคงที่หลัก (สตริง [] args)
-
ตัวจับเวลานาฬิกาจับเวลา = นาฬิกาจับเวลาใหม่ ();
รวมยาว = 0;
timer.Start ();
สำหรับ (int i = 1; i <= 10000000; i++)
-
รวม += ฉัน;
}
timer.Stop();
ทศนิยม micro = timer.Elapsed.Ticks / 10m;
Console.WriteLine("เวลาดำเนินการคือ {0:F1} ไมโครวินาที", ไมโคร);
-
-
-
นอกจากนี้ ให้ใช้คุณสมบัติ IsRunning เพื่อตรวจสอบว่าอินสแตนซ์ Stopwatch จับเวลาหรือไม่ และใช้เมธอด StartNew เพื่อเริ่มตัวจับเวลาใหม่