问题一:前几天写并行计算的实际应用——通讯录的时候,用到了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.