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

2016-02-19 21:50 40 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;

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

      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;

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

      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;
                  }

                  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的最高精确度了。
      下面是最终的程序代码:

  
      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;
                  }

                  timer.Stop();

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

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

延伸阅读
标签: ASP
  ASP缓冲的启动方法:     1. IIS中设置缓冲默认状态为启动       - 在IIS点击网站点击网站属性       - 选择主目录,按Alt+G或点击配置按钮       - 选择应用程序选项,选中启用缓冲      &...
标签: Web开发
这里使用asp.net2.0的TreeView控件结合JavaScript实现权限树的部分功能。 假设权限树中有如下三条规则: 1、该节点可以访问,则他的父节点也必能访问; 2、该节点可以访问,则他的子节点也都能访问; 3、该节点不可访问,则他的子节点也不能访问。 代码如下: //获取元素指定tagName的父元素 function public...
标签: Web开发
今天用了一下2.0中的用户控件,发现使用编程方式使用用户控件,跟1.X 中截然不同。 1、首先,要在所要使用的Page 头部声明引用。 如下: %@ Reference Control="../Controls/AlbumEditor.ascx" % 2、在后置代码里,从“ASP”空间中就可以找到此控件的类引用了,不过还需要事例一下。 -_-! 不明白设计者为什么要这么...
标签: PS PS教程
    首先是取决于硬件方面,这里只谈软件的设置,包括两方面: 一、关于操作系统的设置 1.设置好windows的虚拟内存,不要用windows的的推荐设置,自己手工设置。 2.整理硬盘和清除硬盘碎片是必不可少的。 3.尽可能关闭一切应用程序,如关闭壁纸、屏幕保护、动画鼠标等。 4.保证计算机没有...
标签: 电脑入门
是否你的电脑运行的速度越来越慢了,是否你找不到何原因你的电脑运行速度会变慢,到底该怎么解决这个问题才好呢,告诉你,可能是内存的问题,下面给大家介绍几个方法来加快电脑内存速度的好办法。 1.调整高速缓存区域的大小。 所谓高速缓存,是指系统在读取磁盘、光盘上的数据时,采取预读取技术,也 就是将估计即将要读取的数据预先读取到内...

经验教程

405

收藏

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