Mari kita bayangkan kita memiliki pengukuran sederhana menggunakan Stopwatch
public void DoWork()
{
var timer = Stopwatch.StartNew();
// some hard work
Logger.Log("Time elapsed: {0}", timer.Elapsed);
timer.Stop(); // Do I need to call this?
}
Menurut MSDN:
Dalam skenario Stopwatch biasa, Anda memanggil metode Mulai, kemudian memanggil metode Berhenti , kemudian Anda memeriksa waktu yang berlalu menggunakan properti Berlalu.
Saya tidak yakin apakah saya harus memanggil metode ini ketika saya tidak lagi tertarik dengan contoh pengatur waktu. Haruskah saya "menjernihkan" menggunakan Stop
metode?
EDIT
Perlu diingat bahwa Logger.Log (..) tidak ada biaya karena timer.Elapsed
dibaca sebelum logger.
Stop
Metode mencegah Anda dari kesalahan ceroboh, misalnya jika Anda mengevaluasiElapsed
properti beberapa kali.Stop
akan membuat perbedaan? Anda tetap tidak dapat menggunakan nilainyaJawaban:
Tidak, Anda tidak perlu menghentikannya.
Stop()
berhenti melacak waktu yang telah berlalu. Itu tidak membebaskan sumber daya apa pun.sumber
Tidak, tidak perlu menghentikan atau membersihkannya.
Stopwatch
tidak menggunakan sumber daya yang tidak dikelola (jika Anda memikirkannyaIDisposable
). Ini sebenarnya tidak menggunakan setiap sumber daya sama sekali (kecuali memori yang digunakan oleh objek itu sendiri, tentu saja)! Itu juga tidak mengkonsumsi CPU apa pun saat mengukur waktu yang telah berlalu!Dalam jendela implementasi dari NET (.NET Framework penuh, Mono, NET Core), itu hanya panggilan
QueryPerformanceCounter()
API Windows ketika dibutuhkan (padaStart()
danStop()
dan ketika membacaElapsed
) untuk mengambil resolusi tinggi cap waktu.Dalam implementasi Linux dari Mono dan .NET Core, ia menggunakan
clock_gettime
fungsi untuk mengambil nilai waktu yang meningkat secara monotonik.Untuk siapa saja yang sangat ingin tahu tentang detail implementasi: baca posting ini .
sumber
Saya pikir Stop berguna jika Anda ingin menggunakan kembali nilai Elapsed.
sumber
Jika kode Anda tidak perlu dihitung, maka tidak perlu menggunakan Stop ().
sumber