標籤:
問題一:前幾天寫並行計算的實際應用——通訊錄的時候,用到了stopwatch來計時,發現這個計時是真正的計時。
Stopwatch stopwatch = new Stopwatch(); TimeSpan timeSpan; double time1,time2; stopwatch.Start(); f1();//花費時間t1 stopwatch.Stop(); timeSpan = stopwatch.Elapsed; time1 = timeSpan.TotalMilliseconds;//time1=t1 stopwatch.Start(); f2();//花費時間t2 stopwatch.Stop(); timeSpan = stopwatch.Elapsed; time2 = timeSpan.TotalMilliseconds;//time2=t1+t2
其中time2的時間是t1+t2,與我預想的tim2=t2 不同。。。
解決方案:
1.使用不同的計時器stopwatch 和stopwatch2,如代碼:
Stopwatch stopwatch = new Stopwatch(); Stopwatch stopwatch2 = new Stopwatch(); TimeSpan timeSpan; double time1,time2; stopwatch.Start(); f1();//花費時間t1 stopwatch.Stop(); timeSpan = stopwatch.Elapsed; time1 = timeSpan.TotalMilliseconds;//time1=t1 stopwatch2.Start(); f2();//花費時間t2 stopwatch2.Stop(); timeSpan = stopwatch2.Elapsed; time2 = timeSpan.TotalMilliseconds;//time2=t2
2.使用reset函數清空計時器stopwatch,也很容易理解,代碼略。
問題二:見代碼:
Stopwatch stopwatch = new Stopwatch(); Stopwatch stopwatch2 = new Stopwatch(); TimeSpan timeSpan; double time1,time2; stopwatch.Start(); f1();//花費時間t1 stopwatch.Stop(); timeSpan = stopwatch.Elapsed; time1 = timeSpan.TotalMilliseconds;//time1=t1 stopwatch2.Start(); f2();//花費時間t2
stopwatch.Stop();//此處應該為stopwatch2.Stop();的。。。
timeSpan = stopwatch2.Elapsed; time2 = timeSpan.TotalMilliseconds;//time2=t2
在第二個計時器stopwatch2結束時,把stopwatch2 敲成了stopwatch,那麼問題來了,我的程式竟然沒受到影響。。。
原因是:當stopwatch執行個體正在運行或已停止時,可以查詢已耗用時間屬性。
就是這句話,也就是說
雖然stopwatch2沒有stop,但是我代碼中的這句話timeSpan = stopwatch2.Elapsed; 把當前所記錄的時間提取了出來。。。
所以說我記錄的時間沒受影響,即time1=t1 ,time2=t2.
C# Stopwatch