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.

时间: 2025-01-06 18:11:40

C# Stopwatch的相关文章

C# 计时器 Stopwatch

示例代码: Stopwatch myWatch = new Stopwatch(); myWatch.Start(); //循环列表,添加数据 foreach (SDic item in list) { dalSDic.Save(item); } myWatch.Stop(); MessageBox.Show(string.Format("执行完毕,新增数据耗时:{0}", myWatch.Elapsed));

统计代码执行时间,使用Stopwatch和UserProcessorTime的区别

当我们需要统计一段代码的执行时间,首先想到的可能是Stopwatch类.在这里,先暂不使用Stopwatch,自定义一个统计代码执行时间的类,大致需要考虑到: 1.确保统计的是当前进程.当前线程中代码的执行时间.2.在统计执行过程中,不允许有垃圾回收.即在统计代码执行时间之前,就让GC完成垃圾回收. 举例:统计显示一个数组元素所消耗的时间 class Program { static void Main(string[] args) { int[] arrs = new int[10000];

使用.net Stopwatch class 来分析你的代码

当我们在调试,优化我们的代码的时候,想知道某段代码的真正的执行时间,或者我们怀疑某段代码,或是某几段代码执行比较慢, 需要得到具体的某段代码的具体执行时间的时候.有一个很好用的类Stopwatch. Stopwatch 类在 System.Diagnostics命名空间下.可以用来做分析.net代码块的基本工具. 例如: System.Diagnostics.Stopwatch timerObj = new System.Diagnostics.Stopwatch(); timerObj.Sta

stout代码分析之六:Stopwatch

在进行性能测试时,经常需要计算某个函数执行的时长.stout中的Stopwatch类可实现纳秒精度的计时. Stopwatch内部使用timespec记录开始和技术时间.   timeval和timespec稍有不同,有两点: timeval精确到微秒,而timespec精确到纳秒 获取当前时间,timeval对应函数gettimeofday(&tv,NULL), timespec对应函数clock_gettime(CLOCK_REALTIME, &ts); api如下: start, 开

C#中各种计时器 Stopwatch、TimeSpan

1.使用 Stopwatch 类 (System.Diagnostics.Stopwatch) Stopwatch 实例可以测量一个时间间隔的运行时间,也可以测量多个时间间隔的总运行时间.在典型的 Stopwatch 方案中,先调用 Start 方法,然后调用 Stop 方法,最后使用 Elapsed 属性检查运行时间. Stopwatch 实例或者在运行,或者已停止:使用 IsRunning 可以确定 Stopwatch 的当前状态.使用 Start 可以开始测量运行时间:使用 Stop 可以

监控代码运行时长 -- StopWatch用法例程

在.net环境下,精确的测量出某段代码运行的时长,在网络通信.串口通信以及异步操作中很有意义.现在做了简单的总结.具体代码如下: (1).首先 using System.Diagnostics; (2).主要代码 Stopwatch sw = new Stopwatch(); //监听循环10000次需要的时长 // 计时开始 sw.Start(); for (int i = 0; i < 10000;i++ ) { // to do } // 计时结束 sw.Stop(); Console.W

程序计时器Stopwatch类的运用

Stopwatch提供了几个方法用以控制Stopwatch对象.Start方法开始一个计时操作,Stop方法停止计时.此时如果第二次使用Start方法,将继续计时,最终的计时结果为两次计时的累加.为避免这种情况,在第二次计时前用Reset方法将对象归零.这三个方法都不需要参数. 命名空间:System.Diagnostics 构造函数:Stopwatch sw=new Stopwatch( ); 方法: Start  开始或继续测量某个时间间隔的运行时间. Stop  停止测量某个时间间隔的运行

StopWatch

在.NET程序中,可以使用StopWatch来测试算法的性能. StopWatch sw=new StopWatch(); sw.Start(); //启动计时 //编写代码执行被测试的算法 sw.Stop(); //停止计时 //获取算法执行时间 long UsedTime=sw.EllipsedMilliseconds;

Stopwatch检测代码运行时间

System.Diagnostics.Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); // 开始监视代码运行时间 // you code .... stopwatch.Stop(); // 停止监视 TimeSpan timespan = stopwatch.Elapsed; // 获取当前实例测量得出的总时间 double hours = timespan.TotalHours; // 总小时 double minutes =

StopWatch简单了解

有时候我们需要了解某个方法或某段程序的运行时间,我们可以直接用System.currentTimeMillis(); 然后再相减就可以了.当然,我们也可以直接用StopWatch . package com.sohu.tv.m.servlet; import org.springframework.util.StopWatch; /**  * StopWatch简单了解  *  * @author liweihan  * @time 2016-12-13 11:38  */ public cla