首页 > 编程语言 >C# 中增加一个使用StopWatch记录方法执行时间的通用方法

C# 中增加一个使用StopWatch记录方法执行时间的通用方法

时间:2023-11-24 11:11:49浏览次数:30  
标签:threadName methodName string C# object isEntryExitEnabled source StopWatch 方法

目录

一 背景

在很多时候我们在进行代码排查的时候需要在日志中记录代码的执行时间从而方便我们进行代码运行效率的执行,我们在日志中准确记录方法的执行时间,这样方便我们进行代码的排查,下面分享一个我们常用的记录方式,方便使用,而且最重要的是代码高效和简单。

二 源码

public struct LogEntryExit : IDisposable
  {
    private readonly long entryTimestamp;
    private readonly string methodName;
    private readonly string source;
    private readonly string threadName;
    private bool isEntryExitEnabled;

    public LogEntryExit(string source)
    {
      this.isEntryExitEnabled = Log.IsCategoryEnabled(LogCategory.EntryExit);
      if (!this.isEntryExitEnabled)
      {
        this.entryTimestamp = 0L;
        this.source = (string) null;
        this.methodName = (string) null;
        this.threadName = (string) null;
      }
      else
      {
        this.entryTimestamp = Stopwatch.GetTimestamp();
        this.source = source;
        this.methodName = new StackFrame(1).GetMethod().Name;
        this.threadName = Global.GetThreadId();
        Log.Write(LogCategory.EntryExit, source, string.Format("TID {0} Entering {1}", (object) this.threadName, (object) this.methodName));
      }
    }

    void IDisposable.Dispose()
    {
      if (!this.isEntryExitEnabled)
        return;
      long num = (Stopwatch.GetTimestamp() - this.entryTimestamp) * 1000L / Stopwatch.Frequency;
      this.isEntryExitEnabled = false;
      Log.Write(LogCategory.EntryExit, this.source, string.Format("TID {0} Exiting {1} after {2} ms", (object) this.threadName, (object) this.methodName, (object) num));
    }
  }
}

2.1 注意事项

isEntryExitEnabled这个属性是开启日志记录的关键,必须设置为true,否则不能进行代码的时间记录和使用,这个部分需要根据自己的需要进行调整。

三 使用方法

using(var logEntryExit=new LogEntryExit("Source"))
{
    // warp your source codes here
   ...
}

标签:threadName,methodName,string,C#,object,isEntryExitEnabled,source,StopWatch,方法
From: https://www.cnblogs.com/seekdream/p/17853306.html

相关文章

  • emacs在目录里查找字符串
    1.  输入命令   M-xrgrep2.  提示要查找的字符串,请输入   Searchfor(default"xxx_abab"):3.  提示被查找文件的正则条件,请输入    Searchfor"xxx_abab"infiles(default*.[ch]):4.  提示被查找的目录名,请输入    Basedi......
  • csdn 快速制作动态gif 插图
    文章目录1、简介2、下载工具LICEcap3、步骤1)安装下载软件2)双击打开3)点击record按钮录制4)结束录制1、简介制作csdn动态插图2、下载工具LICEcap官方下载网址:https://pc.qq.com/detail/0/detail_22760.html3、步骤1)安装下载软件2)双击打开出现如图所示透明窗口,可以拖动改变大小......
  • Service 服务详解 及自定义服务模板
    文章目录1、服务简介2、服务的生命周期1)Service的启动停止2)、服务的生命周期的方法3、使用startService启动后服务的生命周期1)、文件结构2)activity_main.xml文件3)、myService自定义服务文件4)、MainActivity文件5)、AndroidManifest.xml文件6)、打印的相关log5、使用bindS......
  • Android 状态模式 接口的调用(interface)
    文章目录1、状态模式介绍2、状态模式的定义3、状态模式的使用场景4、状态模式的UML类图5、状态模式的简单示例6、代码结构1)TvStateOperate接口文件2)、PowerOnState开机状态下操作3)、PowerOffState关机状态下操作过程4)、PowerController电视状态设定接口5)、TvControlle......
  • interface 接口回调简单模板
    文章目录1、功能简介2、MainActivity文件3、Message文件4、log打印1、功能简介方便在不同类,不同activity之间进行数据传递文件结构:Mainactvity向Message里面传数据,Message处理后,通过接口将处理过后的数据返回到MainActivity2、MainActivity文件packagecom.example.ubun......
  • canvas drawable 绘制图片时钟
    文章目录1、功能介绍2、文件结构3、xml文件4、MainActivity.java文件5、自定义的view文件1、功能介绍1)通过实例化drawable资源图片对象2)调用canvas进行图片的绘制和刷新上图指针分别是三个图片2、文件结构3、xml文件<?xmlversion="1.0"encoding="utf-8"?><Relat......
  • recycleView 简单模板框架
    文章目录1、功能简介2、文件结构3、build.gradle(Module:app)4、activity_main.xml文件5、recycleview_item.xml6、RecycleViewAdapter文件7、StudentData文件8、MainActivity文件1、功能简介实现recycle和自定义item的适配读取姓名2、文件结构3、build.gradle(Module:......
  • Android MVC 模式的介绍 与 实战
    文章目录1、mvc框架图2、MVC在Android模式里的实现4、小结1、mvc框架图经典的mvc模式如图所示1)Model(模型层)在MVC中Model一般用来保存数据的状态,比如数据存储,网络请求。同时还与View存在一定的耦合,通过某种事件机制(比如观察者模式)通知View状态的改变来让view更......
  • Android 工厂方法模式
    文章目录1、工厂方法模式介绍2、工厂方法模式的定义3、使用场景4、模式的简单实现1、工厂方法模式介绍工厂方法模式(FactoryPattern),是创建型设计模式之一。工厂方法模式是一个结构比较简单的模式。2、工厂方法模式的定义就是一个用于创建对象的接口,让子类来决定实体化那个类。3......
  • Java 远程调用连接本地ElasticSearch服务并进行操作
    简单几步,结合Cpolar内网穿透工具实现Java远程连接操作本地ElasticsearchCpolar内网穿透提供了更高的安全性和隐私保护,通过使用加密通信通道,Cpolar技术可以确保数据传输的安全性,这为用户和团队提供了更可靠的保护,使他们能够放心地处理和存储敏感的工作内容。 1.Windows安......