使用.NET 2.0中的秒表-Stopwatch类进行速度测试

2016-02-19 21:50 43 1 收藏

今天图老师小编给大家精心推荐个使用.NET 2.0中的秒表-Stopwatch类进行速度测试教程,一起来看看过程究竟如何进行吧!喜欢还请点个赞哦~

【 tulaoshi.com - Web开发 】

      软件的运行速度必须要在用户可以接受的范围内。通常,改善那些短暂的但频繁使用的例程的速度会大幅度地提高软件的整体速度。
      要改善速度,当然首先要能够量度时间。好,那我们考虑一下在跑道上的情况,枪声一响,马上按下秒表开始计时,在选手到达终点那一刻结束计时,这时就可以知道该选手所用的时间了。要开始对下一轮比赛计时前,要先将秒表归零。.NET2.0也提供了这样一个秒表:Stopwatch类,它可以比较精确地测量时间。
      速度测试:
      软件的性能和可测性是一个复杂的主题。要确保应用程序能够满足用户的期望,就需要在开发周期内考虑它的性能和可测性。这在设计阶段至关重要,一个糟糕的设计几乎肯定会导致糟糕的用户体验。然而,仅仅有好的设计也不能保证程序能够高效地运行,最终代码的质量同样重要。
      量度一个运行时间较长的例程相当简单。如果一个过程会持续几分钟,只要一块腕表就可以记录它的时间了。比如一个执行时间为两分钟的过程,10%的改善能够节省12秒,这是很容易去确定的。
      而如果要测量一个非常短暂的过程,就要考虑更好的精确性了。比如有一些很小的例程,它们的运行时间可能只有千分之一秒,但会被调用100万次,这样的累积效果就明显了。在.NET framework的先前版本中,需要使用Windows API函数,而在.NET framework 2.0中,微软引入了Stopwatch(它就是我们的秒表)类来简化时间的量度任务。
      Stopwatch类:
      使用Stopwatch类来量度时间非常简单。跟现实生活中的秒表一样,这个类的对象也能够对计数器进行开始、停止、归零(重置)操作,不过它可比一般的秒表精确多了,它能够精确到微秒(也就是百万分之一秒)。
      示例代码:
      要演示Stopwatch的使用还是来段代码吧。下面是一个控制台应用程序,它将1到100万之间的所有整数累加:

  
      using System;

      namespace StopWatchClass
      {
          class Program
          {
              static void Main(string[] args)
              {
                  long total = 0;

                  for (int i = 1; i = 10000000; i++)
                  {
                      total += i;
                  }
              }
          }
      }   
      添加Stopwatch对象:
      Stopwatch类位于System.Diagnostics命名空间。下面是添加对象后的代码:
      using System;
      using System.Diagnostics;

      namespace StopWatchClass
      {
          class Program
          {
              static void Main(string[] args)
              {
                  Stopwatch timer = new Stopwatch();
                  long total = 0;

                  for (int i = 1; i = 10000000; i++)
                  {
                      total += i;
                  }
              }
          }
      }
      控制Stopwatch对象:
      Stopwatch提供了几个方法用以控制Stopwatch对象。Start方法开始一个计时操作,Stop方法停止计时。此时如果第二次使用Start方法,将继续计时,最终的计时结果为两次计时的累加。为避免这种情况,在第二次计时前用Reset方法将对象归零。这三个方法都不需要参数。代码是:
      using System;
      using System.Diagnostics;

      namespace StopWatchClass
      {
          class Program
          {
              static void Main(string[] args)
              {
                  Stopwatch timer = new Stopwatch();
                  long total = 0;

                  timer.Start();
                  for (int i = 1; i = 10000000; i++)
                  {
                      total += i;
                  }

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

                  timer.Stop();
              }
          }
      }
      读取Stopwatch结果:
  !--[if !supportLists]--!--[endif]--    在结束计时后下一步就是读取计时结果了。Stopwatch类提供了一下属性:
  !--[if !supportLists]--!--[endif]--!--[if !supportLists]--!--[endif]--
  Elapsed:返回一个TimeSpan对象,表示计时时间间隔;
  ElapsedMilliseconds:返回计时经过的微秒数,精确度稍差,适合于稍长一点的计时;
  ElapsedTicks:返回计时经过的计时器刻度(timer tick)数。计时器刻度是Stopwatch对象可能的最小量度单位。计时器刻度时间的长度由特定的计算机和操作系统确定。Stopwatch对象的Frequency静态字段的值表示一秒所包含的计时器刻度数。注意它与TimeSpan的Ticks属性所用的时间单位的区别。
      应当根据计时任务的情况选择其中的一个属性。在我们的示例程序中,Elapsed属性提供了需要的精确度,用它来输出经过的微秒数。这也是TimeSpan的最高精确度了。
      下面是最终的程序代码:

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

  
      using System;
      using System.Diagnostics;

      namespace StopWatchClass
      {
          class Program
          {
              static void Main(string[] args)
              {
                  Stopwatch timer = new Stopwatch();
                  long total = 0;

                  timer.Start();
                  for (int i = 1; i = 10000000; i++)
                  {
                      total += i;
                  }

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

                  timer.Stop();

                  decimal micro = timer.Elapsed.Ticks / 10m;
                  Console.WriteLine("Execution time was {0:F1} microseconds.", micro);
              }
          }
      }
      另外,使用IsRunning属性可以查看一个Stopwatch实例是否正在计时,使用StartNew方法可以开始一个新的计时器。

来源:http://www.tulaoshi.com/n/20160219/1627262.html

延伸阅读
标签: Web开发
这里使用asp.net2.0的TreeView控件结合JavaScript实现权限树的部分功能。 假设权限树中有如下三条规则: 1、该节点可以访问,则他的父节点也必能访问; 2、该节点可以访问,则他的子节点也都能访问; 3、该节点不可访问,则他的子节点也不能访问。 代码如下: //获取元素指定tagName的父元素 function public...
NUnit适用于.Net开发中的单元测试,使用步骤如下 1、下载NUnit-2.2.2并解压或安装。 2、VS.Net中建立 项目,添加对NUnit.Framework.dll的引用, 3、创建新类AccountTest 测试已存在的类Account 4、将代码编译为DLL或exe文件,在nunit-gui主程序中打开编译过的程序,选中要运行的Test Case点Run 另外,配合DCGWin,可将NUnit的测试结果(保存的XML...
标签: 手机
定期重启手机 在使用iPhone时,大多数用户都会一直保持着开机状态,但定期重启手机其实是很有必要的。就像是关闭后台应用一样,关闭手机可以帮助iPhone摆脱那些一直在占用系统资源的东西。 删除旧的短信会话 大量的短信也是拖垮手机速度的原因之一,如果你搞不清楚手机为什么变卡,可以尝试删除手机当中那些无意义的老短信。...
标签: PS PS教程
    首先是取决于硬件方面,这里只谈软件的设置,包括两方面: 一、关于操作系统的设置 1.设置好windows的虚拟内存,不要用windows的的推荐设置,自己手工设置。 2.整理硬盘和清除硬盘碎片是必不可少的。 3.尽可能关闭一切应用程序,如关闭壁纸、屏幕保护、动画鼠标等。 4.保证计算机没有...
标签: 电脑
打开注册表 打开 注册表 (简单提下进入方法:点电脑左下脚的 -” 开始-“--”运行“--输入命令“ regedit” 按 Enter 键就可以进入注册表了,如下图 到[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun]下,删除不必要的开机启动项。例如:kugoo、3721、qq、dudu加速、realone、msn 等 禁用windows服务 控制面板-管理...

经验教程

647

收藏

67
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部