Kemungkinan Duplikat:
Bagaimana cara mengukur berapa lama suatu fungsi berjalan?
Saya memiliki metode pengambilan waktu I / O yang menyalin data dari satu lokasi ke lokasi lain. Apa cara terbaik dan paling nyata untuk menghitung waktu eksekusi? Thread
? Timer
? Stopwatch
? Ada solusi lain? Saya ingin yang paling tepat, dan sesingkat mungkin.
ThreadPool.QueueUserWorkItem(delegate { CopyFiles(folder, dest); });
dalam, tetapi stopwatch berhenti sebelum semuanya dilakukan.Dari pengalaman pribadi,
System.Diagnostics.Stopwatch
kelas dapat digunakan untuk mengukur waktu eksekusi suatu metode, namun, WASPADALAH : Itu tidak sepenuhnya akurat!Perhatikan contoh berikut:
Contoh hasil
Sekarang Anda bertanya-tanya; "Yah, mengapa perlu waktu 132ms pertama kali, dan secara signifikan lebih sedikit dari sisa waktu?"
Jawabannya adalah itu
Stopwatch
tidak mengkompensasi aktivitas "latar belakang suara" di .NET, seperti JITing. Oleh karena itu saat pertama kali Anda menjalankan metode Anda, .NET JIT yang pertama. Waktu yang diperlukan untuk melakukan ini ditambahkan ke waktu eksekusi. Sama halnya, faktor-faktor lain juga akan menyebabkan waktu eksekusi berbeda-beda.Yang benar-benar harus Anda cari adalah keakuratan absolut adalah Performance Profileing !
Lihatlah yang berikut ini:
RedGate ANTS Performance Profiler adalah produk komersial, tetapi menghasilkan hasil yang sangat akurat. - Tingkatkan kinerja aplikasi Anda dengan .NET profiling
Berikut ini adalah artikel StackOverflow tentang pembuatan profil: - What Are Some Good .NET Profiler?
Saya juga telah menulis artikel tentang Kinerja Profil menggunakan Stopwatch yang mungkin ingin Anda lihat - Profil kinerja di .NET
sumber
StopWatch
kelas mencari solusi terbaik Anda.Juga memiliki bidang statis yang disebut
Stopwatch.IsHighResolution
. Tentu saja, ini adalah masalah perangkat keras dan sistem operasi.sumber
Jika Anda tertarik untuk memahami kinerja, jawaban terbaik adalah menggunakan profiler.
Jika tidak, System.Diagnostics.StopWatch menyediakan timer resolusi tinggi.
sumber
StopWatch akan menggunakan penghitung resolusi tinggi
Jika Anda mengukur IO maka angka Anda kemungkinan akan dipengaruhi oleh peristiwa eksternal, dan saya akan sangat khawatir. ketepatan (seperti yang Anda tunjukkan di atas). Alih-alih, saya akan melakukan serangkaian pengukuran dan mempertimbangkan rata-rata dan distribusi angka-angka itu.
sumber
sumber