C# Stopwatch类用法

//首先引入命名空间
using System.Diagnostics;

        public static void Mian()
        { 
            Stopwatch sw = new Stopwatch();
            sw.Start();
            for (int i = 0; i < 1000000001; i++)
            {
                if (i % 2 == 1)
                { }
                else
                { }
            }
            sw.Stop();
            Console.WriteLine(sw.ElapsedMilliseconds);
        }

### C#Stopwatch 的使用方法 `Stopwatch` 是 .NET 提供的一个用于高性能计时的工具,位于 `System.Diagnostics` 命名空间下。它能够提供高分辨率的时间间隔度量,适合用来测量代码段的执行时间。 以下是关于如何使用 `Stopwatch` 的详细介绍以及几个典型示例: #### 示例 1:基本用法 这是最简单的用法,展示如何创建、启动和停止一个 `Stopwatch` 实例,并获取其经过的时间。 ```csharp 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.Elapsed); } } ``` 上述代码展示了如何通过调用 `Start()` 和 `Stop()` 方法来控制计时过程,并通过属性 `Elapsed` 获取经过的时间[^2]。 --- #### 示例 2:测量函数执行时间 下面的例子演示了如何使用 `Stopwatch` 来测量特定函数的执行时间。 ```csharp using System; using System.Diagnostics; class Program { static void Main() { Stopwatch stopwatch = Stopwatch.StartNew(); // 创建并立即启动 // 调用待测函数 DoSomeHeavyComputation(); stopwatch.Stop(); // 停止计时 // 输出毫秒级执行时间 Console.WriteLine($"Execution Time: {stopwatch.Elapsed.TotalMilliseconds} ms"); } static void DoSomeHeavyComputation() { long result = 0; for (int i = 0; i < 1_000_000; i++) { result += i * i; } } } ``` 此示例中,`DoSomeHeavyComputation` 函数模拟了一个耗时的操作,而 `TotalMilliseconds` 属性则提供了以毫秒为单位的执行时间[^1]。 --- #### 示例 3:多次运行取平均值 为了提高测量准确性,可以通过多次运行目标代码并将结果求平均值的方式减少误差。 ```csharp using System; using System.Diagnostics; class Program { static void Main() { int iterations = 1_000_000; double totalTime = 0; for (int i = 0; i < iterations; i++) { Stopwatch stopwatch = Stopwatch.StartNew(); PerformTask(); stopwatch.Stop(); totalTime += stopwatch.Elapsed.TotalMilliseconds; } double averageTime = totalTime / iterations; Console.WriteLine($"Average Execution Time: {averageTime:F6} ms"); } static void PerformTask() { // 简单的任务 Math.Sqrt(12345); } } ``` 在此场景中,通过重复执行任务并计算平均值,可以有效降低因外部因素引起的波动影响[^4]。 --- #### 示例 4:处理高频计时需求 当需要更高精度的时间测量时,可以借助于 `Stopwatch.Frequency` 将计时周期转换成具体的时间单位。 ```csharp using System; using System.Diagnostics; class Program { static void Main() { if (!Stopwatch.IsHighResolution) { Console.WriteLine("当前系统未支持高分辨率计时器!"); return; } long frequency = Stopwatch.Frequency; Console.WriteLine($"计时频率: {frequency} ticks/second"); Stopwatch stopwatch = Stopwatch.StartNew(); System.Threading.Thread.Sleep(500); // 暂停半秒钟 stopwatch.Stop(); long elapsedTicks = stopwatch.ElapsedTicks; double elapsedTimeInSeconds = ((double)elapsedTicks / frequency); Console.WriteLine($"经过时间: {elapsedTimeInSeconds:F9} seconds"); } } ``` 这里验证了系统的高分辨率特性,并基于 `Frequency` 进行了更精细的时间换算。 --- ### 总结 以上介绍了几种常见的 `Stopwatch` 使用方式,涵盖了基础应用到高级技巧的内容。无论是在调试阶段评估性能瓶颈还是优化算法效率方面,该都扮演着重要角色。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值