编辑
2025-09-19
C#
00

目录

特色
使用场景
示例
示例 1: 基本用法
示例 2: 累积时间
示例 3: 使用 Elapsed 属性
总结

Stopwatch 类是在 .NET 框架中用于测量运行时间的一种精确方式,属于 System.Diagnostics 命名空间。它提供了一种简单的方法来计时操作的执行,无论是用于性能测试、基准测试还是确保代码在特定时间限制内运行。

特色

  • 高精度计时Stopwatch 使用最高精度的计时器提供时间测量。
  • 易于使用:提供了简单的开始、停止和重置方法来控制计时操作。
  • 灵活性:可以测量一次操作的时间或累积多次操作的总时间。
  • 性能分析:非常适用于代码优化和性能分析,帮助开发者识别瓶颈。

使用场景

  1. 性能测试:测量代码块、数据库查询或任何操作的执行时间。
  2. 基准测试:比较不同算法或方法的执行时间,找出最优解。
  3. 监控执行时间:确保关键操作在给定时间内完成,适用于实时系统或时间敏感的应用。
  4. 优化反馈:在开发过程中提供即时反馈,帮助开发者识别和优化慢执行路径。

示例

示例 1: 基本用法

计算一个简单操作的执行时间。

C#
using System; using System.Diagnostics; class Program { static void Main() { Stopwatch stopwatch = new Stopwatch(); // 开始计时 stopwatch.Start(); // 执行一些操作 for(int i = 0; i < 1000; i++) { Console.WriteLine(i); } // 停止计时 stopwatch.Stop(); // 输出执行时间 Console.WriteLine($"执行时间: {stopwatch.ElapsedMilliseconds} 毫秒"); } }

image.png

示例 2: 累积时间

测量多个操作总的执行时间。

C#
using System; using System.Diagnostics; class Program { static void Main() { Stopwatch stopwatch = new Stopwatch(); // 开始计时 stopwatch.Start(); // 执行第一个操作 System.Threading.Thread.Sleep(1000); // 模拟耗时操作 // 暂停计时 stopwatch.Stop(); Console.WriteLine($"第一次操作时间: {stopwatch.ElapsedMilliseconds} 毫秒"); // 重置并重新开始计时 stopwatch.Reset(); stopwatch.Start(); // 执行第二个操作 System.Threading.Thread.Sleep(2000); // 模拟耗时操作 // 停止计时 stopwatch.Stop(); Console.WriteLine($"第二次操作时间: {stopwatch.ElapsedMilliseconds} 毫秒"); } }

image.png

示例 3: 使用 Elapsed 属性

获取更详细的时间信息。

C#
using System; using System.Diagnostics; class Program { static void Main() { Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); // 执行一些操作 System.Threading.Thread.Sleep(1500); // 模拟耗时操作 stopwatch.Stop(); // 使用 Elapsed 属性获取 TimeSpan 对象 TimeSpan ts = stopwatch.Elapsed; // 格式化输出 string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10); Console.WriteLine($"执行时间: {elapsedTime}"); } }

image.png

总结

Stopwatch 类是一个强大的工具,用于在 .NET 应用程序中测量代码执行时间。它的高精度和易用性使得它成为性能测试和优化的理想选择。通过上述示例,您可以开始在自己的应用程序中使用 Stopwatch 来诊断性能问题和优化代码执行时间。

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!