C# Stopwatch

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

 

posted @ 2015-11-16 10:49  gongpixin  阅读(561)  评论(0编辑  收藏  举报