何卫涛 发表于 2024-3-15 10:57:12

轻盈高效:深入了解.NET中的ValueStopwatch计时器

 
概述:ValueStopwatch是.NET中轻量级计时器,用于高性能时间测量。作为值类型,避免了装箱拆箱开销,内存占用小。通过简单的使用方法,轻松实现代码块执行时间测量,且相比Stopwatch更为高效。
在.NET中,ValueStopwatch是一个轻量级的计时器类,用于测量代码块的执行时间。相较于
System.Diagnostics.Stopwatch,它是一个值类型,提供更高的性能和更少的内存开销。
功能:


[*]测量执行时间: 计算代码块的执行时间。
[*]轻量级设计: 使用值类型,减少装箱和拆箱的开销。
基本使用方法:


[*]安装 NuGet 包:
Install-Package System.Diagnostics.PerformanceCounter -Version 5.0.0

[*]引用命名空间:
using System.Diagnostics;

[*]创建和使用 ValueStopwatch:
// 创建 ValueStopwatch 实例 ValueStopwatch stopwatch = ValueStopwatch.StartNew(); // 在此执行需要测量的代码块 // 获取经过的时间 TimeSpan elapsed = stopwatch.Elapsed;
优点:


[*]性能优越: 由于是值类型,避免了装箱和拆箱操作,性能更高。
[*]内存开销小: 不使用对象引用,减少了内存占用。
高级应用:

1. 执行多次测量:

using System;

class Program
{
    static void Main()
    {
      // 创建 ValueStopwatch 实例
      ValueStopwatch stopwatch = ValueStopwatch.StartNew();

      // 执行多次需要测量的代码块
      for (int i = 0; i < 5; i++)
      {
            DoTimeConsumingOperation();
            TimeSpan elapsed = stopwatch.Elapsed;

            Console.WriteLine($"第 {i + 1} 次耗时:{elapsed.TotalMilliseconds} 毫秒");
      }
    }

    static void DoTimeConsumingOperation()
    {
      // 模拟耗时操作
      for (int i = 0; i < 100000000; i++)
      {
            // 执行一些计算
            var result = Math.Sqrt(i);
      }
    }
}2. 结合Stopwatch进行更精准测量:

using System;
using System.Diagnostics;

class Program
{
    static void Main()
    {
      // 创建 ValueStopwatch 实例
      ValueStopwatch stopwatch = ValueStopwatch.StartNew();

      // 使用 Stopwatch 进行更精准的测量
      Stopwatch highPrecisionStopwatch = Stopwatch.StartNew();

      // 在此执行需要测量的代码块

      highPrecisionStopwatch.Stop();

      // 获取经过的时间
      TimeSpan elapsed = stopwatch.Elapsed;
      TimeSpan highPrecisionElapsed = highPrecisionStopwatch.Elapsed;

      Console.WriteLine($"ValueStopwatch 耗时:{elapsed.TotalMilliseconds} 毫秒");
      Console.WriteLine($"高精度 Stopwatch 耗时:{highPrecisionElapsed.TotalMilliseconds} 毫秒");
    }
}相比Stopwatch的优点:


[*]轻量级设计: ValueStopwatch是值类型,避免了Stopwatch中一些对象引用的开销,减小了内存占用。
[*]无需初始化: ValueStopwatch不需要显式初始化,直接使用StartNew即可开始计时,而Stopwatch需要调用Start方法。
通过以上方法,你可以更灵活地使用 ValueStopwatch,根据具体需求进行高级的应用和优化。
 


来源:https://www.cnblogs.com/hanbing81868164/p/18074449
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 轻盈高效:深入了解.NET中的ValueStopwatch计时器