目录

简单介绍

  Stopwatch 可以测量一个时间间隔的运行时间,也可以测量多个时间间隔的总运行时间。一般用来测量代码执行所用的时间或者计算性能数据,在优化代码性能上可以使用Stopwatch来测量时间。

基本用法

  使用的时候需要引用 System.Diagnostics 命名空间。先调用 Start 方法,然后调用 Stop 方法,最后使用 Elapsed 属性或者使用 ElapsedMilliseconds 属性得到运行时间(这两个属性的区别是前者得到的是TimeSpan实例,后者得到的是毫秒)。使用 IsRunning 可以确定 Stopwatch 的当前状态是正在运行还是已经停止。每次调用 Start 时开始累计运行时间计数;每次调用 Stop 时结束当前时间间隔测量,并冻结累计运行时间值。 使用 Reset 方法可以清除现有 Stopwatch 实例中的累计运行时间。

  下面的示例演示如何使用 Stopwatch 类来确定应用程序的执行时间:

  

            Stopwatch stopwatch = new Stopwatch();
//第一次计时
stopwatch.Start();
Console.WriteLine("Stopwatch is running:{0}",stopwatch.IsRunning);//判断当前Stopwatch的状态
System.Threading.Thread.Sleep();//耗时操作
stopwatch.Stop();
Console.WriteLine("Using Elapsed output runTime:{0}", stopwatch.Elapsed.ToString());//这里使用时间差来输出
Console.WriteLine("Using ElapsedMilliseconds output runTime:{0}", stopwatch.ElapsedMilliseconds);//这里面使用毫秒来输出
Console.WriteLine("===================================================");
//第二次计时
stopwatch.Start();
System.Threading.Thread.Sleep();//耗时操作
stopwatch.Stop();
Console.WriteLine("The second RunTime:{0}", stopwatch.ElapsedMilliseconds);//这里面使用毫秒来输出
Console.WriteLine("===================================================");
//第三次计时(这里使用了Restart)
stopwatch.Restart();//这里使用Restart来启动计时(会把前面的时间清空)
System.Threading.Thread.Sleep();//耗时操作
stopwatch.Stop();
Console.WriteLine("Using Restart, so runTime:{0}", stopwatch.ElapsedMilliseconds);//这里面使用毫秒来输出
Console.ReadKey();

  运行结果:

   

  备注:程序中我 Sleep 了1000ms 但是输入结果是第一次是1002 第二次是2003 最后是1000,有一定的误差跟电脑性能和当前CPU的状态有关系(这里我是猜测的)。

在实际的项目中,有时候我们无法使用Console.WriteLine() 或者 MessageBox.Show()来得到运行时间,这时候我们就需要把时间写进一个文本文件中。

  下面的示例演示如何使用 Stopwatch 类来确定应用程序的执行时间并把时间输出到文本文件中(这里我为了简单使用的是 StreamWriter):

  

            const string path = @"D:\StopwatchDemo.txt";

            using (StreamWriter streamWriter = new StreamWriter(path, true, Encoding.UTF8))
{
streamWriter.WriteLine("Start");
streamWriter.Flush();
Stopwatch stopwatch = Stopwatch.StartNew();
System.Threading.Thread.Sleep();//耗时操作
stopwatch.Stop();
streamWriter.WriteLine("RunTime:{0}", stopwatch.ElapsedMilliseconds);//以毫秒的形式写进文件
streamWriter.Flush();
}

  运行结果:

  

结尾

    C#中用于计时的操作不只是 Stopwatch 还有其他的如 Timer、TimeSpan 等。我这里只是用Stopwatch来举个例子。  

  

C#知识点-StopWatch-计时的更多相关文章

  1. C# Stopwatch计时统计

    using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using S ...

  2. C#中精确计时的一点收获 Stopwatch

    http://www.cnblogs.com/jintianhu/archive/2010/09/01/1815031.html 参考: https://www.cnblogs.com/kissdod ...

  3. C#中精确计时的一点收获 【转】

    C#中精确计时的一点收获 [转] 以下所有代码运行环境:Windows 2003, Intel(R) Core(TM) 2 Duo CPU E8400 @  3.00GHz 2.99GHz,2.96G ...

  4. System.Diagnostics.Stopwatch

    System.Diagnostics.Stopwatch 注意:此类在 .NET Framework 2.0 版中是新增的.MSDN Stopwatch 实例可以测量一个时间间隔的运行时间,也可以测量 ...

  5. C#中精确计时的一点收获

    以下所有代码运行环境:Windows 2003, Intel(R) Core(TM) 2 Duo CPU E8400 @  3.00GHz 2.99GHz,2.96GB内存 根据综合网上的一些文章,精 ...

  6. Stopwatch 和TimeSpan介绍【转】

    1.使用 Stopwatch 类 (System.Diagnostics.Stopwatch) Stopwatch 实例可以测量一个时间间隔的运行时间,也可以测量多个时间间隔的总运行时间.在典型的 S ...

  7. C#中各种计时器 Stopwatch、TimeSpan

    1.使用 Stopwatch 类 (System.Diagnostics.Stopwatch)Stopwatch 实例可以测量一个时间间隔的运行时间,也可以测量多个时间间隔的总运行时间.在典型的 St ...

  8. C# Stopwatch 类

    命名空间:System.Diagnostics Stopwatch 实例可以测量一个时间间隔的运行时间,也可以测量多个时间间隔的总运行时间.在典型的 Stopwatch 方案中,先调用 Start 方 ...

  9. C# Stopwatch详解

    namespace System.Diagnostics { // // 摘要: // 提供一组方法和属性,可用于准确地测量运行时间. public class Stopwatch { // // 摘 ...

  10. .NET中System.Diagnostics.Stopwatch、System.Timers.Timer、System.Threading.Timer 的区别

    1.System.Diagnostics.Stopwatch Stopwatch 实例可以测量一个时间间隔的运行时间,也可以测量多个时间间隔的总运行时间. 在典型的 Stopwatch 方案中,先调用 ...

随机推荐

  1. zabbix告警邮件美化

    为了更好的用户体验,我们需要尽量美化我们的输出内容,尽量做到整齐划一,让人看了会有很舒服的感觉, 这个好像和苹果的产品一样,给人一种美感让人感觉非常享受. 一般我们的zabbix告警邮件就是纯文字,建 ...

  2. 洛谷P2983 [USACO10FEB]购买巧克力Chocolate Buying

    题目描述 Bessie and the herd love chocolate so Farmer John is buying them some. The Bovine Chocolate Sto ...

  3. java.sql.SQLException: Operation not allowed after ResultSet closed

    转自:http://blog.csdn.net/hellobobantang/article/details/7173622 java.sql.SQLException: Operation not ...

  4. 洛谷P3372线段树模板1——线段树

    题目:https://www.luogu.org/problemnew/show/P3372 线段树模板. 代码如下: #include<iostream> #include<cst ...

  5. 树——平衡二叉树插入和查找的JAVA实现(2):增加删除方法

    package com.tomsnail.data.tree; /** * AVL二叉平衡树 * @author tomsnail * @date 2015年3月30日 下午4:35:50 */ pu ...

  6. Nuget-QRCode:QRCoder

    ylbtech-Nuget-QRCode:QRCoder 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部 0. https://github.com/codebu ...

  7. 6、scala面向对象-对象

    一.对象 1.object object,相当于class的单个实例,通常在里面放一些静态的field或者method,第一次调用object的方法时,就会执行object的constructor, ...

  8. json字符串与json对象之间的转换

    字符串转对象(strJSON代表json字符串)   var obj = eval(strJSON); (运用时候需要除了eval()以外需要json.js包)  var obj = strJSON. ...

  9. html页面渲染过程

    1.解析html文件,创建DOM树 自上而下解析,遇到任何样式(link.style)和脚本(script)都会阻塞 1)css加载不会阻塞html文件的解析,但会阻塞dom的渲染 2)css加载会阻 ...

  10. 剑指Offer的学习笔记(C#篇)-- 连续子数组的最大和

    题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决.但是,如果向量 ...