`
61party
  • 浏览: 1135605 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

用Stopwatch类来测试你的程序运行时间

阅读更多

上个月在项目中,由于我做的网页后台计算步骤多,运行时间长,成了棘手问题,如此一来就要优化性能,找出瓶颈,重构代码

同事当时的建议是使用时间戳(timespan),后来一个同事用的是诊断模式里面一个计时方法,现在看来都很别扭,因为要

把时间减来减去,感觉不方便,不好用.今天我偶然的发现了stopwatch这个宝贝,不错,这个类是在.net 2.0的时候才加入的

看来微软想的挺周到,这个类就是专门为了对付这种情况来使用的工具,并且它还有一个非常不错的功能,可以重新归零再计时

.下面是转载的内容.

软件的运行速度必须要在用户可以接受的范围内。通常,改善那些短暂的但频繁使用的例程的速度会大幅度地提高软件的整体速度。
要改善速度,当然首先要能够量度时间。好,那我们考虑一下在跑道上的情况,枪声一响,马上按下秒表开始计时,在选手到达终点那一刻结束计时,这时就可以知 道该选手所用的时间了。要开始对下一轮比赛计时前,要先将秒表归零。.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;
}

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方法可以开始一个新的计时器。

分享到:
评论

相关推荐

    CSharp 4.0 .Net Framework V4.0 Stopwatch 类

    C# 中的 `Stopwatch` 类是 .NET Framework 4.0 版本中的一个工具,用于精确地测量代码执行的...总结来说,`C#` 中的 `Stopwatch` 类是衡量代码执行时间的重要工具,它的使用简单,性能优秀,尤其适用于性能测试和分析。

    Stopwatch

    例如,你可能会创建一个Stopwatch实例来衡量在大量文本处理中使用不同字体所花费的时间,从而确定哪一种字体在性能上更优。 总的来说,"Stopwatch"和"字体"结合在一起,可能意味着在软件开发中进行的性能测试,特别...

    《C#计时利器:Stopwatch的使用》源代码

    在.NET框架中,`System.Diagnostics.Stopwatch`类是开发者用于衡量代码执行时间的重要工具,尤其在性能测试和优化中起到关键作用。`Stopwatch`类提供了精确到纳秒级的时间测量,使得它成为C#中计时的首选方法。本文...

    Stopwatch精准秒表

    `Stopwatch`类特别适用于需要精确计时的场合,比如性能测试、游戏开发或者任何需要测量代码执行速度的应用程序。 `Stopwatch`类的主要优点在于它的准确性。它不依赖于系统时钟的更新频率,而是直接与硬件定时器交互...

    .NET/C# 使用Stopwatch测量运行时间

    本文将深入探讨如何使用`Stopwatch`类来测量运行时间,并通过示例代码详细阐述其用法。 `Stopwatch`类位于`System.Diagnostics`命名空间中,其主要方法包括`Start()`, `Stop()`, `Reset()`, `Restart()`以及获取...

    用于计算C++程序或算法的运行时间,基于C++11.zip

    首先,要计算程序运行时间,我们通常会用到`chrono`库,这是C++11引入的一个时间处理库。`chrono`库提供了多种时间点和时间间隔类型,如`system_clock`、`high_resolution_clock`和`duration`等。我们可以用`high_...

    C#使用StopWatch获取程序毫秒级执行时间的方法

    在C#编程中,有时我们需要...总结来说,使用 `Stopwatch` 类在C#中获取程序执行时间是一个简单而高效的方法,特别适用于性能测试和代码优化。通过学习并熟练掌握这一工具,开发者可以更好地理解和改进他们的代码性能。

    stopwatch.rar

    2. **代码段计时**:开发者可以标记代码段的开始和结束,秒表会计算这段时间内的运行时间。 3. **日志记录**:秒表可能具有将计时结果保存到日志文件或显示在控制台的功能,方便后续分析。 4. **统计分析**:除了...

    java 记录程序执行的时间

    System.out.println("程序运行时间: " + stopwatch.elapsed(TimeUnit.MILLISECONDS) + " 毫秒"); ``` 在分析程序性能时,除了记录单次执行时间,还常常需要多次运行并计算平均时间,这可以通过嵌套循环实现。同时,...

    vb.net控制台程序示例:浮点运算测试程序源码.zip

    开发者可能会用到`Console.ReadLine`来读取用户输入,并通过`System.Diagnostics.Stopwatch`类来度量运算时间。 VB.NET中的代码执行流程可能是这样的: 1. 初始化浮点数数组,填充随机数值。 2. 使用循环进行大量...

    秒表_stopwatch_

    秒表(Stopwatch)在IT领域中是一种常见的时间测量工具,尤其在软件开发、性能测试和游戏编程中有着广泛的应用。秒表功能通常用于精确地测量代码执行的时间,以评估程序性能或进行基准测试。在硬件层面,秒表功能...

    开源项目-didip-stopwatch.zip

    开源项目-didip-stopwatch.zip 是一个用于性能测试和时间度量的小型库,它提供了一个方便的工具,帮助开发者追踪代码段的执行时间,从而优化程序性能。这个库的名称"stopwatch"通常指的是计时器或者秒表,与编程中的...

    C#测量程序运行时间及cpu使用时间实例方法

    1. 使用`Stopwatch`来获取程序运行时间,它能提供较高的精度,适用于大多数情况。 2. 使用`Process.TotalProcessorTime`来获取CPU使用时间,了解程序对处理器的占用情况。 3. 分析`Stopwatch.Elapsed`和`Stopwatch....

    CPU压力测试-vs2010中C#程序

    例如,使用`Stopwatch`类来测量代码执行时间,以便了解性能改进的效果。同时,使用`ThreadPool`或者`Task`类进行异步操作,可以更有效地利用系统资源,实现并行计算。 标签中的“c# 源码”提示我们可以期待从提供的...

    C++ 一个简单的秒表类

    `main.cpp`文件则可能包含了测试代码,展示了如何使用StopWatch类来测量特定代码块的执行时间。`stop_watch.h`是头文件,定义了StopWatch类的接口,供其他模块引用。 在实际应用中,我们可以使用这个StopWatch类来...

    stopwatch:具有计时功能且易于使用的静态方法的秒表类。 对诊断有用

    `Stopwatch`类在.NET框架中提供了精确的计时功能,它能够帮助开发者测量代码执行的时间,从而优化性能或理解程序运行的效率。TypeScript,作为JavaScript的超集,也提供了类似的工具,尽管它本身不内置`Stopwatch`类...

    StopWatch:类似于C#的秒表的秒表类,一直到名称空间

    StopWatch 类是 C++ 中一个用于衡量代码执行时间...总的来说,StopWatch 类是 C++ 开发者在性能优化过程中不可或缺的工具,通过自定义实现或使用第三方库,可以帮助我们准确地测量代码执行的时间,从而提升程序的性能。

    STOPWATCH FOR MOTO ROKR E8

    【标题】"STOPWATCH FOR MOTO ROKR E8"是一个专门为摩托罗拉ROKR E8手机设计的计时器应用程序的源代码。这个计时器功能完善,能在MOTOMAGX移动平台上流畅运行。 【描述】描述指出,这是一个计时器(STOPWATCH)的源...

    用C#写的时钟秒表程序

    总的来说,这个C#秒表程序展示了C#语言在桌面应用开发中的能力,以及如何结合图形界面和高级编程特性(如Stopwatch类)来实现实用工具。对于学习C#和Windows编程的开发者来说,这是一个很好的实践项目,可以帮助他们...

    电脑性能测试-VB版.zip

    在VB6中,可以使用Timer控件和StopWatch类来计时。首先,设置一个初始时间点,然后执行待测运算,最后获取结束时间并计算两者之差。此外,可以使用循环结构重复执行测试以提高准确性,最后取平均值作为最终结果。 ...

Global site tag (gtag.js) - Google Analytics