จากประสบการณ์ส่วนตัวSystem.Diagnostics.Stopwatch
ชั้นเรียนสามารถใช้ในการวัดเวลาดำเนินการของวิธีการอย่างไรก็ตามระวัง : มันไม่ถูกต้องทั้งหมด!
ลองพิจารณาตัวอย่างต่อไปนี้:
Stopwatch sw;
for(int index = 0; index < 10; index++)
{
sw = Stopwatch.StartNew();
DoSomething();
Console.WriteLine(sw.ElapsedMilliseconds);
}
sw.Stop();
ตัวอย่างผลลัพธ์
132ms
4ms
3ms
3ms
2ms
3ms
34ms
2ms
1ms
1ms
ตอนนี้คุณกำลังสงสัย "ทำไมถึงใช้เวลา 132 มิลลิวินาทีในครั้งแรกและใช้เวลาที่เหลือน้อยลงอย่างเห็นได้ชัด"
คำตอบคือStopwatch
ไม่ชดเชยกิจกรรม "เสียงรบกวนรอบข้าง" ใน. NET เช่น JITing ดังนั้นเป็นครั้งแรกที่คุณเรียกใช้วิธีการของคุณ. NET JIT เป็นครั้งแรก เวลาที่ใช้ในการทำเช่นนี้จะถูกเพิ่มเข้ากับเวลาของการดำเนินการ ปัจจัยอื่น ๆ เช่นกันจะทำให้เวลาดำเนินการแตกต่างกัน
สิ่งที่คุณควรมองหาความแม่นยำแน่นอนคือการทำโปรไฟล์ประสิทธิภาพ !
ดูที่ต่อไปนี้:
RedGate ANTS Performance Profiler เป็นผลิตภัณฑ์เชิงพาณิชย์ แต่ให้ผลลัพธ์ที่แม่นยำมาก - เพิ่มประสิทธิภาพของแอพพลิเคชั่นของคุณด้วย. NET Profiling
นี่คือบทความ StackOverflow ในการทำโปรไฟล์: - Profilers. NET ที่ดีคืออะไร
ฉันได้เขียนบทความเกี่ยวกับการทำโปรไฟล์ประสิทธิภาพด้วยนาฬิกาจับเวลาที่คุณอาจต้องการดู - การทำโปรไฟล์ประสิทธิภาพใน. NET
ThreadPool.QueueUserWorkItem(delegate { CopyFiles(folder, dest); });
ภายใน แต่นาฬิกาจับเวลาหยุดก่อนที่จะทำทุกอย่าง