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

server/2024/9/19 7:43:12/ 标签: c#, 开发语言

用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/server/31765.html

相关文章

面试题分享之Java集合篇(三)

注意:文章若有错误的地方,欢迎评论区里面指正 🍭 系列文章目录 面试题分享之Java基础篇(二)面试题分享之Java基础篇(三) 面试题分享之Java集合篇(一)、 面试题分享之Ja…

Java 基础面试 -- 异常处理

一、引言 在Java编程中,异常处理是确保程序稳定性和健壮性的重要机制。当程序在运行时遇到不可预见的问题,如文件读取失败、网络错误、除零异常等,异常处理机制允许我们捕获这些错误,并进行相应的处理,从而避免程序崩…

SQL-慢查询的定位及优化

定位慢查询sql 启用慢查询日志: 确保MySQL实例已经启用了慢查询日志功能。可以通过以下命令查看是否启用: SHOW VARIABLES LIKE slow_query_log;如果未启用,可以通过以下命令启用: SET GLOBAL slow_query_log ON;配置慢查询日志&…

ssm104园区停车管理系统+jsp

园区停车管理系统的设计与实现 摘 要 网络技术和计算机技术发展至今,已经拥有了深厚的理论基础,并在现实中进行了充分运用,尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代,所以对于信息的宣传和管…

数据库管理-第180期 23ai: Cloud/Container Plus AI(20240503)

数据库管理180期 2024-05-03 数据库管理-第180期 23ai: Cloud/Container Plus AI(20240503)1 Free版本更新2 如我所期3 宣传图Oracle Vector DBJSON Relational DualityProperty GraphsShardingTrue CacheFirewall 总结 数据库管理-第180期 23ai: Cloud/…

QT:label标签/进度条的使用

文章目录 设置不同格式的文本显示图片文本对齐/自动换行/缩进/边距LCDNumber倒计时 ProgressBar进度条 设置不同格式的文本 在文本格式中,存在富文本,makedown格式的文本,还有纯文本,下面就依据这三个进行举例 #include "w…

嵌入式开发四:STM32 基础知识入门

为方便更好的学习STM32单片机,本篇博客主要总结STM32的入门基础知识,重点在于理解寄存器以及存储器映射和寄存器映射,深刻体会STM32是如何组织和管理庞大的寄存器,从而提高开发效率的,为后面的基于标准库的开发做好铺垫…

Python实战开发及案例分析(2)——单目标优化

在Python中,进行单目标优化主要涉及定义一个优化问题,包括一个目标函数和可能的约束条件,然后选择合适的算法来求解。Python提供了多种库,如SciPy、Pyomo、GEKKO等,用于处理各种优化问题。 案例分析:使用 …

python实验一 简单的递归应用

实验一 实验题目 1、兔子繁殖问题(Fibonacci’s Rabbits)。一对兔子从出生后第三个月开始,每月生一对小兔子。小兔子到第三个月又开始生下一代小兔子。假若兔子只生不死,一月份抱来一对刚出生的小兔子,问一年中每个月各有多少只兔子。 &…

使用protoc-jar-maven-plugin生成grpc项目

在《使用protobuf-maven-plugin生成grpc项目》中我们使用protobuf-maven-plugin完成了grpc代码的翻译。本文我们将只是替换pom.xml中的部分内容,使用protoc-jar-maven-plugin来完成相同的功能。总体来说protoc-jar-maven-plugin方案更加简便。 环境 见《使用proto…

Android Framework中PackageManagerService的深度剖析

摘要 Android操作系统的核心服务之一——PackageManagerService(PMS),扮演着至关重要的角色,负责维护系统中所有应用程序的生命周期管理。本文旨在全面探讨PMS的功能特性、工作流程、实际应用场景,并对其进行优劣分析,以期为开发者…

多级留言/评论的功能实现——SpringBoot3后端篇

目录 功能描述数据库表设计后端接口设计实体类entity 完整实体类dto 封装请求数据dto 封装分页请求数据vo 请求返回数据 Controller控制层Service层接口实现类 Mapper层Mybatis 操作数据库 补充:返回的数据结构自动创建实体类 最近毕设做完了,开始来梳理…

Windows安装Ubuntu24详细教程

从官网下载ISO镜像: 使用VMWare创建新的虚拟机: 选择刚才下载的ISO镜像: 填写账号和密码: 选择安装位置和虚拟机名称,因为我装这个主要是为了QT开发的,所以名字叫ubuntu24_for_qt: 处理…

Halcon 深度学习缺陷检测

文章目录 深度学习标注训练推理推理代码示例 深度学习标注 > 获取图片路径 C:\Users\Administrator\AppData\Roaming\MVTec\HALCON-23.11-Progress\examples\images必须要有Good或者是OK文件夹做标注,剩下两个为逻辑异常和结构异常 点击检查选择good可以获取所有good图像的…

Oracle集群-常用查询及操作(工作日常整理)

1.Oracle集群状态 select * from gv$instance; 示例结果: 2.Oracle集群-增大表空间 常见问题: 导入时或使用时,提示无法extend table ,增加表空间即可 常用操作: 1)查询表空间 select * from dba_tablespaces; --…

算法打卡day40

今日任务: 1)139.单词拆分 2)多重背包理论基础(卡码网56携带矿石资源) 3)背包问题总结 4)复习day15 139单词拆分 题目链接:139. 单词拆分 - 力扣(LeetCode) …

如何在Android设备上恢复丢失的照片

Android手机或平板电脑上的照片丢失了?不要惊慌,您也许可以恢复它们。 由于我们的大量数据和日常生活都存储在一台设备上,有时将所有照片存储在本地的 Android 智能手机或平板电脑上可能是一项冒险的工作。无论是通过事故(损坏、…

HTML5+CSS3小实例:无限循环loading动画

实例:无限循环loading动画 技术栈:HTML+CSS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-sc…

AQS解密:深入理解 CountDownLatch, Semaphore 和 CyclicBarrier

1. AQS&#xff08;AbstractQueuedSynchronizer&#xff09;框架简介 AQS是java.util.concurrent.locks包中的一个抽象类&#xff0c;是实现同步器&#xff08;如锁和其他多线程同步工具&#xff09;的一个框架。Doug Lea设计了这个框架&#xff0c;旨在让开发者通过使用其提供…

什么是 IoT,代表性的 IoT 产品或服务都有哪些?

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 物联网&#xff08;IoT&#xff09;是一个由互联设备组成的网络&#xff0c;包括嵌入传感器、软件等技术的机械和数字机器&#xff0c;以及消费品。这些设备能够相互连接&#xff0c;并与云交换数据。I…