一般我们想要测试使用那种方法或着那种类型效率更高,使用Stopwatch类进行测试就可以,我也是现在才知道,汗一个。

先来看个小示例,如下。

前提,先引用using System.Diagnostics;命名空间。

1        //实例化一个sw
 2 Stopwatch sw = new Stopwatch();
 3 //开始计数
 4 sw.Start();
 5
 6 //实例化一个sb
 7 StringBuilder sb = new StringBuilder();
 8
 9 //循环
10 for (int i = 0; i < 10000; i++)
11 {
12 //追加
13 sb.Append(i);
14 }
15 //输出所用时间 毫秒
16 Console.WriteLine(sw.ElapsedMilliseconds);
17
18 //重置为0
19 sw.Reset();
20 //开始计数
21 sw.Start();
22 //字义一个 s字符串
23 string s = "";
24
25 //循环
26 for (int i = 0; i < 10000; i++)
27 {
28 s = s + i;
29
30 }
31 //输出所用时间 毫秒
32 Console.WriteLine(sw.ElapsedMilliseconds);
33
34 //重置为0
35 sw.Reset();
36 //开始计数
37 sw.Start();
38 //字义一个 b字符串
39 string b = "";
40 //循环
41 for (int i = 0; i < 10000; i++)
42 {
43 b += i;
44
45 }
46 //输出所用时间 毫秒
47 Console.WriteLine(sw.ElapsedMilliseconds);
48 Console.ReadLine();

下面在介绍几个属性。

Elapsed:返回一个TimeSpan对象,表示计时时间间隔;

ElapsedMilliseconds:返回计时经过的毫秒数,精确度稍差,适合于稍长一点的计时;

ElapsedTicks: 返回计时经过的计时器刻度(timer tick)数。计时器刻度是Stopwatch对象可能的最小量度单位。计时器刻度时间的长度由特定的计算机和操作系统确定。Stopwatch对象的 Frequency静态字段的值表示一秒所包含的计时器刻度数。注意它与TimeSpan的Ticks属性所用的时间单位的区别。

应当根据计时任务的情况选择其中的一个属性。在我们的示例程序中,Elapsed属性提供了需要的精确度,用它来输出经过的微秒数。这也是TimeSpan的最高精确度了。

使用IsRunning属性可以查看一个Stopwatch实例是否正在计时,使用StartNew方法可以开始一个新的计时器。

Stopwatch类位于System.Diagnostics命名空间,是用来度量程序运行时间,对于自动化测试来说,利用Elapsed属性,就可以度量完成测试用例所应用的时间,并添加到log信息里面。

Stopwatch提供了几个方法用以控制stopwatch对象。Start方法开始一个计时操作,stop方法停止计时。此时如果第二次使用start方法,将继续计时,最终计时的结果为两次计时的累加。为避免这种情况,在第二次计时时使用Reset方法将对象归零。使用IsRunning可以确定stopwatch的当前状态。

结束计时后,读取stopwatch的结果,stopwatch类提供了以下属性:

  • Elapsed:返回一个TimeSpan对象,表示时间间隔;
  • ElapsedMillinseconds:返回计时经过的微妙数;
  • ElapsedTicks:返回计时经过的计时器刻度(timer tick)数。计时器刻度时stopwatch对象可能的最小量度单位。计时器刻度时间的长度由特定的计算机和操作系统确定。

下面时Stopwatch和Nlog结合的一段示例:

Log.SetConfig();

Log.Info("Info");

Log.Warn("Warn");

Log.Error("Error");

Log.ChangleConfig();

Stopwatch during = new Stopwatch();

during.Start();

string starttime = DateTime.Now.ToString();

//logger.Info("Starttime" + ": " + starttime);

Log.Info("Info");

Log.Warn("Warn");

Log.Error("Error");

for (int i = 0; i < 4; i++)

{

Thread.Sleep(1000);

Log.Info("Info");

Log.Warn("Warn");

Log.Error("Error");

}

Log.Info("Starttime" + ": " + starttime);

Log.Info("EndTime" + ": " + DateTime.Now);

during.Stop();

Log.Info("During" + ": " + during.Elapsed.ToString());

Log.Info("Warn: " + Log._warn_count);

Log.Info("Error: " + Log._error_count);

Stopwatch 类【转】的更多相关文章

  1. [转]使用Stopwatch类实现高精度计时

    对一段代码计时同查通常有三种方法.最简单就是用DateTime.Now来进行比较了,不过其精度只有3.3毫秒,可以通过DllImport导入QueryPerformanceFrequency和Quer ...

  2. 用Stopwatch类获得程序运行时间

    我们可以用Stopwatch类获得程序的运行时间,在优化代码时,可以用此方法来查看优化前后程序所耗费的时间 //Stopwatch类別在System.Diagnostics命名空间里 Stopwatc ...

  3. 利用StopWatch类监控Java代码执行时间并分析性能

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

  4. Stopwatch类学习

    1.概述:给一条大MSDN的链接关于Stopwatch类最详细的教程 ,然后看着教程自己手动敲一边,加深映象,好记性不如烂键盘,哈哈,开个玩笑! 2.类位置:这个类在哪里,这个是重点,虽然C#IDE很 ...

  5. C# Stopwatch 类

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

  6. C#获取实例运行时间StopWatch类

    在程序运行时有时需要获取某一步骤的操作时间,C#提供的StopWatch类可以很方便的实现这一目的. StopWatch sw=new StopWatch(); sw.Start(); //Do So ...

  7. Stopwatch 类用于计算程序运行时间

    Stopwatch 类 命名空间:System.Diagnostics.Stopwatch 实例化:Stopwatch getTime=new Stopwatch(); 开始计时:getTime.St ...

  8. 使用StopWatch类来计时 (perf4j-0.9.16.jar 包里的类)

    public class StopWatch { static public int AN_HOUR = 60 * 60 * 1000; static public int A_MINUTE = 60 ...

  9. C# Stopwatch类_性能_时间计时器

    在研究性能的时候,完全可以使用Stopwatch计时器计算一项技术的效率.但是有时想知道某想技术的性能的时候,又常常想不起可以运用Stopwatch这个东西,太可悲了. 属性: Elapsed 获取当 ...

随机推荐

  1. Qt Creator编译时:cannot open file 'debug\QtGuiEx.exe' File not found

    Qt Creator编译时:cannot open file 'debug\QtGuiEx.exe' File not found 利用Qt Creator编译工程时,出现如题目所示的错误,其中红色部 ...

  2. js点击事件防止用户重复点击执行

    点击事件里给button标签加一个自定义属性,存上次点击时间 追问: 求详细代码,JS 真心的没怎么做过 追答:   <input type="button" id=&quo ...

  3. JavaWeb——文件上传和下载

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...

  4. Android 代码混淆及第三方jar包不被混淆

    为了保护代码被反编译,android引入了混淆代码的概念 1.设置混淆 在工程下找到project.properties文件 在文件中加入proguard.config=${sdk.dir}/tool ...

  5. UVA10199- Tourist Guide(割点)

    题目链接 题意: 给出一张无向图,找出割点,字典序输出割点的名字. 思路:简单的割点的求解,用map映射.easy输出. 代码: #include <iostream> #include ...

  6. wpf动画概述

    http://msdn.microsoft.com/zh-cn/library/vstudio/ms752312(v=vs.100).aspx Windows Presentation Foundat ...

  7. linux 能访问内网,但不能访问外网?解决方案

    用iptables就可以了 iptables -F iptables -t nat -F iptables -A INPUT -s -d -j ACCEPT iptables -A INPUT -d ...

  8. mysql-5.6.27源码安装及错误解决办法

    wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.27.tar.gz yum install -y cmake  当然也可以自己下载源码包安 ...

  9. 设置grub密码

    一,明文加密的方法 vi /etc/grub.conf 在hiddenmenu下添加password=1234,保存退出. 二,密文加密的方法 2.1, 使用SHA加密方式.grub-crypt  回 ...

  10. LINQ 基本子句之二 join

    Join子句据说可以实现3中连接关系. 1.内部连接——元素的连接关系必须同时满足被连接的两个数据源 2.分组连接 3.左外连接 1.最基本的,内部连接,类似于sql中inner join. 由于st ...