บ่อยครั้งที่ฉันพบว่าตัวเองกำลังเปรียบเทียบโค้ดส่วนเล็ก ๆ เพื่อดูว่า implemnetation ใดที่เร็วที่สุด
บ่อยครั้งที่ฉันเห็นความคิดเห็นว่ารหัสการเปรียบเทียบไม่ได้คำนึงถึงการกระตุกหรือตัวเก็บขยะ
ฉันมีฟังก์ชันการเปรียบเทียบง่ายๆดังต่อไปนี้ซึ่งฉันได้พัฒนาอย่างช้าๆ:
static void Profile(string description, int iterations, Action func) {
// warm up
func();
// clean up
GC.Collect();
var watch = new Stopwatch();
watch.Start();
for (int i = 0; i < iterations; i++) {
func();
}
watch.Stop();
Console.Write(description);
Console.WriteLine(" Time Elapsed {0} ms", watch.ElapsedMilliseconds);
}
การใช้งาน:
Profile("a descriptions", how_many_iterations_to_run, () =>
{
// ... code being profiled
});
การใช้งานนี้มีข้อบกพร่องหรือไม่? ดีพอหรือไม่ที่จะแสดงให้เห็นว่าการใช้งาน X เร็วกว่าการใช้งาน Y มากกว่าการวนซ้ำ Z คุณคิดวิธีใด ๆ ที่จะปรับปรุงสิ่งนี้ได้ไหม
แก้ไข ค่อนข้างชัดเจนว่าวิธีการตามเวลา (เมื่อเทียบกับการทำซ้ำ) เป็นที่ต้องการใครมีการใช้งานที่การตรวจสอบเวลาไม่ส่งผลกระทบต่อประสิทธิภาพหรือไม่?