用C#写一个特性,在函数上面可以自动计算函数耗时情况

embedded/2024/10/19 2:24:17/

用C#写一个特性,在函数上面可以自动计算函数耗时情况

TimingAttribute类是自定义的特性类,用来标记需要计时的方法。TimingInterceptor类是一个拦截器,它通过反射来拦截被TimingAttribute标记的方法,并在方法执行前后进行计时。MyClass中的MyMethod方法被标记为需要计时,当调用这个方法时,它会被TimingInterceptor拦截,计算执行时间并输出。

using System;
using System.Diagnostics;
using System.Reflection;[AttributeUsage(AttributeTargets.Method)]
public class TimingAttribute : Attribute
{public void OnEntry(){Console.WriteLine("Method execution started.");}public void OnExit(double milliseconds){Console.WriteLine($"Method execution finished. Elapsed time: {milliseconds} milliseconds");}
}public class TimingInterceptor
{public void Intercept(MethodInfo targetMethod){var timingAttribute = (TimingAttribute)targetMethod.GetCustomAttribute(typeof(TimingAttribute));if (timingAttribute != null){timingAttribute.OnEntry();var stopwatch = Stopwatch.StartNew();targetMethod.Invoke(null, null);stopwatch.Stop();timingAttribute.OnExit(stopwatch.Elapsed.TotalMilliseconds);}else{targetMethod.Invoke(null, null);}}
}public class MyClass
{[Timing]public static void MyMethod(){// 模拟一个耗时的操作System.Threading.Thread.Sleep(2000);Console.WriteLine("MyMethod executed.");}
}class Program
{static void Main(string[] args){TimingInterceptor interceptor = new TimingInterceptor();MethodInfo method = typeof(MyClass).GetMethod("MyMethod");interceptor.Intercept(method);}
}

http://www.ppmy.cn/embedded/39740.html

相关文章

客户案例:CACTER云网关为企业O365系统提供安全新护盾

一、客户背景 某智能驾驶企业是一家国际性的高科技创新型企业,其智能驾驶领域处于全球领先地位,专注于为广大客户提供个性化的智能驾驶解决方案,共建美好智能新时代。 使用产品:CACTER邮件安全云网关 二、痛点难点问题 根据…

Redis是什么? 日常运维 Redis 需要注意什么 ? 怎么降低Redis 内存使用 节省内存?

你的项目或许已经使用 Redis 很长时间了,但在使用过程中,你可能还会或多或少地遇到以下问题: 我的 Redis 内存为什么增长这么快?为什么我的 Redis 操作延迟变大了?如何降低 Redis 故障发生的频率?日常运维…

流量分析(一)

数据库类流量分析 MySQL流量 常规操作,查找flag ctfhub{} 注意要选择字符集 Redis流量 查找ctfhub结果没找到 尝试把其变成十六进制继续进行查找 看到了前半段flag 接着往下看 找到了后半段的flag MongoDB流量 还是一样查找ctfhub 字符串没找到 转成十六进制也没…

连通“数据”,让制造变“聪明”

说起数据智能,你第一时间想到的是什么呢?是科技感十足的智慧城市?还是炫酷的人工智能景象? 数据作为企业的战略资产越来越受到重视,从最初的数据协助业务协同,转化为数据驱动业务,数据驱动运营…

dos命令改3389端口,通过dos命令更改3389端口的操作

要使用DOS命令更改3389端口,通常涉及修改Windows注册表中的相关键值。请注意,直接操作注册表具有一定的风险,因此在进行任何更改之前,请确保您了解正在进行的操作,并已经采取了适当的备份措施。 以下是一个基本的操作步…

关于SpringBoot MVC接口超时时间的分析

前言 如果在网上搜索,SpringBoot接口超时时间,很多人会说是配置:spring.mvc.async.request-timeout,这个回答对也不对。主要是这个问题问的就不清不楚,所以这个答案也就不清不楚了。 结论 同步接口没有超时时间一说…

Qt之常用控件一

Widget常见属性及其作用 属性作用enabled 设置控件是否可使⽤. true 表⽰可⽤, false 表⽰禁⽤ geometry 位置和尺⼨. 包含 x, y, width, height 四个部分. 其中坐标是以⽗元素为参考进⾏设置的. windowTitle 设置 widget 标题 windowIcon 设置 widget 图标 windowOpa…

从零开始学AI绘画,万字Stable Diffusion终极教程(三)

【第3期】Lora模型 欢迎来到SD的终极教程,这是我们的第三节课 这套课程分为六节课,会系统性的介绍sd的全部功能,让你打下坚实牢靠的基础 1.SD入门 2.关键词 3.Lora模型 4.图生图 5.controlnet 6.知识补充 在SD里面,有一个…