构造函数
</>code
- Stopwatch()
- 初始化 Stopwatch 类的新实例。
属性
</>code
- Elapsed
- 获取当前实例测量得出的总运行时间。
- ElapsedMilliseconds
- 获取当前实例测量得出的总运行时间(以毫秒为单位)。
- ElapsedTicks
- 获取当前实例测量得出的总运行时间(用计时器刻度表示)。
- IsRunning
- 获取一个值,该值表示 Stopwatch 计时器是否正在运行。
方法
</>code
- Equals(Object)
- 确定指定的对象是否等于当前对象。(继承自 Object。)
- Finalize()
- 在垃圾回收将某一对象回收前允许该对象尝试释放资源并执行其他清理操作。(继承自 Object。)
- GetHashCode()
- 作为默认哈希函数。(继承自 Object。)
- GetTimestamp()
- 获取计时器机制中的当前刻度数。
- GetType()
- 获取当前实例的 Type。(继承自 Object。)
- MemberwiseClone()
- 创建当前 Object 的浅表副本。(继承自 Object。)
- Reset()
- 停止时间间隔测量,并将运行时间重置为零。
- Restart()
- 停止时间间隔测量,将运行时间重置为零,然后开始测量运行时间。
- Start()
- 开始或继续测量某个时间间隔的运行时间。
- StartNew()
- 初始化新的 Stopwatch 实例,将运行时间属性设置为零,然后开始测量运行时间。
- Stop()
- 停止测量某个时间间隔的运行时间。
- ToString()
- 返回表示当前对象的字符串。(继承自 Object。)
字段
</>code
- Frequency
- 获取以每秒刻度数表示的计时器频率。 此字段为只读。
- IsHighResolution
- 指示计时器是否基于高分辨率性能计数器。 此字段为只读。
一个 Stopwatch 实例可以测量运行时间为一个时间间隔或所用的时间合计多个间隔。 在典型 Stopwatch 方案中,调用 Start 方法,然后最终调用 Stop 方法,然后检查经过的时间使用 Elapsed 属性。
一个 Stopwatch 实例正在运行或已停止; 使用 IsRunning 来确定的当前状态 Stopwatch。 使用 Start 开始测量运行时间; 使用 Stop 停止测量运行时间。 查询运行时间值通过属性 Elapsed, ,ElapsedMilliseconds, ,或 ElapsedTicks。 正在运行或已停止实例时,您可以查询运行时间属性。 属性则稳步增多的已用时间而 Stopwatch 是运行; 它们保持不变时停止该实例。
默认情况下,运行时间值的 Stopwatch 实例等于所有规定的时间间隔的合计。 每次调用 Start 开始计数累计的运行时间; 每次调用 Stop 结束当前的时间间隔测量,并会冻结的累计运行时间值。 使用 Reset 方法清除中现有的累计已用时间 Stopwatch 实例。
Stopwatch 通过计算基础计时器机制中的计时器刻度来测量运行时间。 如果已安装的硬件和操作系统支持高分辨率性能计数器,则 Stopwatch 类使用该计数器来测量运行时间。 否则为 Stopwatch 类使用系统计时器来测量运行时间。 使用 Frequency 和 IsHighResolution 字段来确定的精度和解决方法 Stopwatch 计时实现。
Stopwatch 类托管代码中与计时相关的性能计数器的操作提供帮助。 具体而言, Frequency 字段和 GetTimestamp 方法可用来代替非托管的 Win32 Api QueryPerformanceFrequency 和 QueryPerformanceCounter。
说明
在多处理器计算机上,它并不重要哪个处理器运行的线程。 但是,由于在 BIOS 或硬件抽象层 (HAL) 中的 bug,您可能会在不同的处理器得到不同的计时结果。 若要指定一个线程的处理器关联,请使用 ProcessThread.ProcessorAffinity 方法。
下面的示例演示如何使用 Stopwatch 类来确定应用程序的执行时间:
</>code
- Stopwatch stopwatch = new Stopwatch(); //第一次计时 stopwatch.Start();
- Console.WriteLine("Stopwatch is running:{0}",stopwatch.IsRunning);//判断当前Stopwatch的状态
- System.Threading.Thread.Sleep(1000);//耗时操作 stopwatch.Stop();
- Console.WriteLine("Using Elapsed output runTime:{0}", stopwatch.Elapsed.ToString());//这里使用时间差来输出
- Console.WriteLine("Using ElapsedMilliseconds output runTime:{0}", stopwatch.ElapsedMilliseconds);//这里面使用毫秒来输出
- Console.WriteLine("==================================================="); //第二次计时 stopwatch.Start();
- System.Threading.Thread.Sleep(1000);//耗时操作 stopwatch.Stop();
- Console.WriteLine("The second RunTime:{0}", stopwatch.ElapsedMilliseconds);//这里面使用毫秒来输出
- Console.WriteLine("==================================================="); //第三次计时(这里使用了Restart)
- stopwatch.Restart();//这里使用Restart来启动计时(会把前面的时间清空)
- System.Threading.Thread.Sleep(1000);//耗时操作 stopwatch.Stop();
- Console.WriteLine("Using Restart, so runTime:{0}", stopwatch.ElapsedMilliseconds);//这里面使用毫秒来输出
- Console.ReadKey();
运行结果:
备注:程序中我 Sleep 了1000ms 但是输入结果是第一次是1002 第二次是2003 最后是1000,有一定的误差跟电脑性能和当前CPU的状态有关系(这里我是猜测的)。
在实际的项目中,有时候我们无法使用Console.WriteLine() 或者 MessageBox.Show()来得到运行时间,这时候我们就需要把时间写进一个文本文件中。
下面的示例演示如何使用 Stopwatch 类来确定应用程序的执行时间并把时间输出到文本文件中(这里我为了简单使用的是 StreamWriter):
</>code
- const string path = @"D:\StopwatchDemo.txt";
- using (StreamWriter streamWriter = new StreamWriter(path, true, Encoding.UTF8))
- {
- streamWriter.WriteLine("Start");
- streamWriter.Flush();
- Stopwatch stopwatch = Stopwatch.StartNew();
- System.Threading.Thread.Sleep(1000);//耗时操作
- stopwatch.Stop();
- streamWriter.WriteLine("RunTime:{0}", stopwatch.ElapsedMilliseconds);//以毫秒的形式写进文件
- streamWriter.Flush();
- }
按 Ctrl+C 复制代码
运行结果:
C#中用于计时的操作不只是 Stopwatch 还有其他的如 Timer、TimeSpan 等。我这里只是用Stopwatch来举个例子。
默认情况 下,Stopwatch 实例的运行时间值相当于所有测量的时间间隔的总和。每次调用 Start 时开始累计运行时间计数;每次调用 Stop 时结束当前时间间隔测量,并冻结累计运行时间值。使用 Reset 方法可以清除现有 Stopwatch 实例中的累计运行时间。
Stopwatch在基础计时器机制中对计时器的刻度进行计数,从而测量运行时间。如果安装的硬件和操作系统支持高分辨率性能的计数器,则 Stopwatch 类将使用该计数器来测量运行时间;否则,Stopwatch 类将使用系统计数器来测量运行时间。使用 Frequency 和 IsHighResolution 字段可以确定实现 Stopwatch 计时的精度和分辨率。
示例
</>code
- System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
- stopwatch.Start();
- //任务 1...
- stopwatch.Stop();
- _result.Text += "<p>任务 1 用时:" + stopwatch.ElapsedTicks + "。</p>";
- stopwatch.Reset(); //若没有 Reset,则会把任务 1 的用时累计进入任务 2
- stopwatch.Start();
- //任务 2...
- stopwatch.Stop();
- _result.Text += "<p>任务 2 用时:" + stopwatch.ElapsedTicks + "。</p>";
如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛