首页 > 其他分享 >轻盈高效:深入了解.NET中的ValueStopwatch计时器

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

时间:2024-03-15 09:11:42浏览次数:21  
标签:测量 System elapsed stopwatch 计时器 Stopwatch NET ValueStopwatch

 

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

在.NET中,ValueStopwatch是一个轻量级的计时器类,用于测量代码块的执行时间。相较于
System.Diagnostics.Stopwatch,它是一个值类型,提供更高的性能和更少的内存开销。

功能:

  • 测量执行时间: 计算代码块的执行时间。
  • 轻量级设计: 使用值类型,减少装箱和拆箱的开销。

基本使用方法:

  1. 安装 NuGet 包:

Install-Package System.Diagnostics.PerformanceCounter -Version 5.0.0

  1. 引用命名空间:

using System.Diagnostics;

  1. 创建和使用 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,根据具体需求进行高级的应用和优化。

 

标签:测量,System,elapsed,stopwatch,计时器,Stopwatch,NET,ValueStopwatch
From: https://www.cnblogs.com/hanbing81868164/p/18074449

相关文章

  • CCLINK转Profinet网关功能介绍及配置方法
    CC-LINK转Profinet网关功能介绍及配置方法CC-LINK转Profinet网关(XD-PNCR20)支持CC-Link系统,采用一种开放式架构的工业现场总线协议,允许不同厂商的设备依此协议进行通信。由于其良好的兼容性,CC-Link广泛使用在在制造产业中的机器控制或程序控制中,也使用在设备管理及智能建筑系统中,包......
  • .NetCore Web Api 项目Docker部署
    .NetCoreWebApi项目Docker部署.Net5之后版本编写的项目代码编译后均可以分别部署在Windows、Linux系统下。只需要安装对应的SDK或者运行时。这篇文章主要介绍.Net项目编译之后通过docker镜像部署WebApi项目了解dotnet命令dotnet命令详细说明链接。不得不说微软的文档......
  • 初识kubernetes
    目录kubernetes简要概述1、kubernetes功能简介服务发现和负载均衡存储编排自动部署和回滚自动完成装箱计算自我修复2、Kubernetes架构及组件kube-apiserveretcdkube-schedulerkube-controller-managercloud-controller-managerNode组件:节点组件在每个节点上......
  • 数据库不应放在容器中?- B站Kubernetes有状态服务实践(Elasticsearch/Clickhouse)
    本期作者前言云原生时代下,Kubernetes已成为容器技术的事实标准, 使得基础设施领域应用下自动化运维管理与编排成为可能。对于无状态服务而言, 业界早已落地数套成熟且较完美的解决方案。可对于有状态的服务, 方案的复杂度就以几何倍数增长, 例如分布式应用多个实例间的依......
  • Kubernetes operator(十) kubebuilder 实战演练 之 开发多版本CronJob【更新中】
    云原生学习路线导航页(持续更新中)本文是Kubernetesoperator学习系列第十篇,本节会在前篇开发的Cronjob基础上,进行多版本Operator开发的实战本文的所有代码,都存储于github代码库:https://github.com/graham924/share-code-operator-study/tree/main/cronJob-operato......
  • .NET Aspire Preview 4 发布!
    .NETAspirePreview4isnowavailable!Here'sasummaryofwhat'snewinthispreviewrelease:.NETAspirePreview4现已推出!以下是此预览版中新增内容的摘要:Podman  Supportforrunningappswith podman支持使用 podman 运行应用程序Dashboard  仪表板......
  • Kubernetes集群节点处于Not Ready问题排查
    Kubernetes集群节点处于NotReady问题排查原创 点击关注......
  • 【AutoCAD .NET】创建Hatch时报错eInvalidInput
    问题出处https://forums.autodesk.com/t5/net/hatch-to-drawn-polyline-e-message-quot-einvalidinput-quot/m-p/9631373问题描述我使用以下语句绘制了一条多段线:Acad.Application.DocumentManager.MdiActiveDocument.SendStringToExecute("PL",true,false,true);按如下......
  • netcat的使用
    目录一、基本使用简介二、netcat的使用渗透测试(端口扫描)要判断某个主机的监听端口是否能连上3.监听服务器4.传输文件5.网速吞吐量测试一、基本使用简介usage:nc[-46CDdFhklNnrStUuvZz][-Ilength][-iinterval][-Mttl][-mminttl][-Olength][-Pproxy_user......
  • netfilter: iptable的使用
    netfilter相关网址官网:netfilter/iptablesprojecthomepageiptables基础知识详解_LarryHai6的博客-CSDN博客_iptables使用iptables进行端口转发-云+社区-腾讯云(tencent.com)原理图iptables1.原理叙述iptables具有Filter,NAT,Mangle,Raw四种内建表:1.Filter......