Stopwatch类提供一组方法和属性,一般用来测量代码运行消耗时间,以便获取更多代码运行性能上的数据。以下主要介绍C#中用Stopwatch实现执行耗时及性能监测的方法。
1)命名空间
using System.Diagnostics;
2)字段
字段 | 字段说明 |
Frequency | 获取以每秒刻度数表示的计时器频率。 此字段为只读。 |
IsHighResolution | 指示计时器是否基于 高分辨率性能计数器 。 此字段为只读。 |
3)属性
属性 | 属性说明 |
Elapsed | 获取当前实例测量得出的总运行时间。 |
ElapsedMilliseconds | 获取当前实例测量得出的总运行时间 (以毫秒为单位)。 |
ElapsedTicks | 获取当前实例测量得出的总运行时间 (用计时器刻度表示)。 |
IsRunning | 获取一个值, 该值表示 Stopwatch 计时器是否正在运行。 |
4)方法
方法 | 方法说明 |
Equals(Object) | 确定指定对象是否等于当前对象。 |
GetHashCode() | 作为默认哈希函数。 |
GetTimestamp() | 获取计时器机制中的当前刻度数。 |
GetType() | 获取当前实例的 Type。 |
MemberwiseClone() | 创建当前 Object 的浅表副本。 |
Reset() | 停止时间间隔测量,并将运行时间重置为零。 |
Restart() | 停止时间间隔测量,将运行时间重置为零, 然后开始测量运行时间。 |
Start() | 开始或继续测量某个时间间隔的运行时间。 |
StartNew() | 初始化新的 Stopwatch 实例, 将运行时间属性设置为零,然后开始测量运行时间。 |
Stop() | 停止测量某个时间间隔的运行时间。 |
ToString() | 返回表示当前对象的字符串。 |
Stopwatch
类相关字段、属性、方法的使用示例,可以参考代码如下,
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
//创建Stopwatch实例
Stopwatch sw = new Stopwatch();
//开始计时
sw.Start();
for (int i = 0; i < 100; i++)
{
Console.WriteLine(i);
}
//停止计时
sw.Stop();
Console.WriteLine("用时:" + sw.ElapsedMilliseconds + "");
//重置 停止时间间隔测量,并将运行时间重置为0
sw.Reset();
Console.WriteLine("用时:" + sw.ElapsedMilliseconds + "");
//重启 停止时间间隔测量,并将运行时间重置为0,然后重新开始 测量运行时间
sw.Restart();
for (int i = 0; i < 100; i++)
{
Console.WriteLine(i);
}
sw.Stop();
//获取当前实例测量得出的总运行时间(以毫秒为单位)
Console.WriteLine("用时:" + sw.ElapsedMilliseconds + "");
//获取当前实例测量得出的总运行时间
Console.WriteLine("用时:" + sw.Elapsed);
//获取当前实例测量得出的总运行时间(用计时器刻度表示)。
Console.WriteLine(sw.ElapsedTicks);
Console.Read();
//开始计时
sw.Start();
System.Threading.Thread.Sleep(1000); //耗时操作 测试代码,休眠1000毫秒
//结束计时
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds); //输出:消耗的毫秒
Console.WriteLine(sw.Elapsed.ToString()); //输出:时:分:秒
//重置秒表
sw.Reset();
Console.WriteLine("Reset End");
//再次开始计时,或者直接用**Restart**函数直接重置并开始
sw.Start();
System.Threading.Thread.Sleep(1200);
//第二次计时结束
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
if (Stopwatch.IsHighResolution)
{
Console.WriteLine("使用系统的高分辨率性能计数器的计时的操作.");
}
else
{
Console.WriteLine("使用DateTime类的计时操作.");
}
long frequency = Stopwatch.Frequency;
Console.WriteLine("计时器频率,以滴答/秒为单位 = {0}", frequency);
long nanosecPerTick = (1000L * 1000L * 1000L) / frequency;
Console.WriteLine("计时器在{0}纳秒以下范围内准确", nanosecPerTick.ToString());
}
}
}