Saya ingin tahu berapa banyak waktu yang dibutuhkan untuk menyelesaikan suatu prosedur / fungsi / perintah, untuk tujuan pengujian.
Ini yang saya lakukan tetapi metode saya salah karena jika selisih detik 0 tidak dapat mengembalikan milidetik yang telah berlalu:
Perhatikan nilai sleep adalah 500 ms sehingga detik yang berlalu adalah 0 maka tidak dapat mengembalikan milidetik.
Dim Execution_Start As System.DateTime = System.DateTime.Now
Threading.Thread.Sleep(500)
Dim Execution_End As System.DateTime = System.DateTime.Now
MsgBox(String.Format("H:{0} M:{1} S:{2} MS:{3}", _
DateDiff(DateInterval.Hour, Execution_Start, Execution_End), _
DateDiff(DateInterval.Minute, Execution_Start, Execution_End), _
DateDiff(DateInterval.Second, Execution_Start, Execution_End), _
DateDiff(DateInterval.Second, Execution_Start, Execution_End) * 60))
Dapatkah seseorang menunjukkan kepada saya cara yang lebih baik untuk melakukan ini? Mungkin dengan TimeSpan
?
Solusinya:
Dim Execution_Start As New Stopwatch
Execution_Start.Start()
Threading.Thread.Sleep(500)
MessageBox.Show("H:" & Execution_Start.Elapsed.Hours & vbNewLine & _
"M:" & Execution_Start.Elapsed.Minutes & vbNewLine & _
"S:" & Execution_Start.Elapsed.Seconds & vbNewLine & _
"MS:" & Execution_Start.Elapsed.Milliseconds & vbNewLine, _
"Code execution time", MessageBoxButtons.OK, MessageBoxIcon.Information)
DateTime.Now
karena masalah Daylight Savings dan Time Zone. Silakan baca posting blog saya tentang subjek iniJawaban:
Cara yang lebih baik adalah menggunakan Stopwatch , daripada menggunakan
DateTime
perbedaan.Kelas Stopwatch - Microsoft Docs
sumber
Thread.Sleep
, hanya ada sebagai contoh kode untuk menunjukkan penundaan .... sebenarnya Anda harus menghindari penggunaanThread.Sleep
di mana saja dalam kode AndaStopwatch
mengukur waktu yang telah berlalu.Ini a
DEMO
.sumber
Stopwatch
di atas setiap baris Anda dan hentikan setelah setiap baris Anda. Ingat, Anda perlu menggunakan jugaStopwatch.Reset
setelah setiap baris untuk menghitung. Berdasarkan garis Anda; lihat ideone.com/DjR6bastopwatch.Elapsed.ToString(@"d\.hh\:mm\:ss")
yang menurut saya cara yang lebih bersih.Anda dapat menggunakan pembungkus Stopwatch ini:
Pemakaian:
Keluaran:
Untuk skenario lanjutan, Anda bisa menggunakan BenchmarkDotNet atau Benchmark.It atau NBench
sumber
Jika Anda menggunakan kelas Stopwatch, Anda dapat menggunakan metode .StartNew () untuk menyetel ulang jam tangan ke 0. Jadi, Anda tidak perlu memanggil .Reset () diikuti oleh .Start (). Mungkin berguna.
sumber
Stopwatch dirancang untuk tujuan ini dan merupakan salah satu cara terbaik untuk mengukur eksekusi waktu di .NET.
Jangan gunakan DateTimes untuk mengukur eksekusi waktu di .NET.
sumber
Jika Anda mencari jumlah waktu yang dihabiskan utas terkait untuk menjalankan kode di dalam aplikasi.
Anda dapat menggunakan
ProcessThread.UserProcessorTime
Properti yang bisa Anda dapatkan diSystem.Diagnostics
namespace.Catatan: Jika Anda menggunakan multi utas, Anda dapat menghitung waktu setiap utas satu per satu dan menjumlahkannya untuk menghitung durasi total.
sumber
Saya tidak dapat melihat versi vb.net tentang bagaimana seseorang dapat menggunakan Stopwatch Class jadi saya telah memberikan contoh di bawah ini.
Saya harap ini membantu siapa saja yang sampai pada pertanyaan ini mencari vb.net.
sumber