V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  cxe2v  ›  全部回复第 1 页 / 共 209 页
回复总数  4164
1  2  3  4  5  6  7  8  9  10 ... 209  
16 小时 29 分钟前
回复了 LuckyPocketWatch 创建的主题 旅行 很少坐飞机,问下这种颠簸算大还是算小?
好像是历史上没有一起空难是因为颠簸
1 天前
回复了 loverorser 创建的主题 生活 为什么不初一初二回家过年
如果不需要在特定日子的话,为什么不现在就把家里人接过来过年
11 天前
回复了 cooco 创建的主题 职场话题 两个 offer 该怎么选呢
@cooco #7 年终这玩意最不可靠,另外,去 B 加班,钱还少了,-2 分了都
11 天前
回复了 cooco 创建的主题 职场话题 两个 offer 该怎么选呢
@cooco #5 B 不是少 2K ?你是算上了 N+2 的那个+2 了?
11 天前
回复了 cooco 创建的主题 职场话题 两个 offer 该怎么选呢
没看出 B 钱多在哪
@cxe2v

1. 定义一个自定义特性
创建一个特性类,用于标记需要记录耗时的方法:

csharp
复制代码
[AttributeUsage(AttributeTargets.Method, Inherited = true)]
public class MeasureTimeAttribute : Attribute
{
}
2. 使用动态代理拦截方法调用
通过 AOP (面向切面编程)的方式,例如使用 Castle DynamicProxy 或 DispatchProxy ,拦截方法的执行并记录耗时。

使用 DispatchProxy 示例:
csharp
复制代码
using System;
using System.Diagnostics;
using System.Reflection;

public class MethodInterceptor<T> : DispatchProxy
{
private T _decorated;

public static T Create(T decorated)
{
object proxy = Create<T, MethodInterceptor<T>>();
((MethodInterceptor<T>)proxy)._decorated = decorated;
return (T)proxy;
我一问 gpt ,代码就出来了,不比在这里问这些网友快?


}

protected override object Invoke(MethodInfo targetMethod, object[] args)
{
// 检查方法是否有 MeasureTimeAttribute
if (targetMethod.GetCustomAttribute<MeasureTimeAttribute>() != null)
{
var stopwatch = Stopwatch.StartNew();
try
{
// 执行实际方法
return targetMethod.Invoke(_decorated, args);
}
finally
{
stopwatch.Stop();
Console.WriteLine($"方法 {targetMethod.Name} 执行耗时: {stopwatch.ElapsedMilliseconds} ms");
}
}
else
{
// 没有特性直接调用方法
return targetMethod.Invoke(_decorated, args);
}
}
}
3. 应用到目标类
csharp
复制代码
public interface IExampleService
{
[MeasureTime]
void DoSomething();

void DoOtherThing();
}

public class ExampleService : IExampleService
{
public void DoSomething()
{
// 模拟耗时操作
System.Threading.Thread.Sleep(100);
Console.WriteLine("执行 DoSomething");
}

public void DoOtherThing()
{
Console.WriteLine("执行 DoOtherThing");
}
}
4. 使用动态代理包装实例
csharp
复制代码
class Program
{
static void Main()
{
var service = MethodInterceptor<IExampleService>.Create(new ExampleService());

service.DoSomething(); // 记录耗时
service.DoOtherThing(); // 不记录耗时
}
}
20 天前
回复了 v2Donuts 创建的主题 职场话题 被公司新来的前端一句话怼无语了
@stabc 你这个认知我觉得你也是个没有什么进步的后端仔
@me1onsoda 他们还有早茶和下午茶时间
@shench 禁止车企生产可以飞线的充电器就行
资本主义国家的话,是要把休息时间算在工作时间的
折叠的原因是因为是复制的大段内容,可以选择手输
34 天前
回复了 mx3y 创建的主题 问与答 求指导,怎样让自己脾气好起来
@mx3y 哥们,不是所有人都一个想法的,你只需要团结跟你一个想法的,然后干翻那些要阻止你的,我毛主席的名言怎么说的,团结大多数,打击极少数
34 天前
回复了 mx3y 创建的主题 问与答 求指导,怎样让自己脾气好起来
@Libby520 挺爽的,干死了一个应该被淘汰的
34 天前
回复了 mx3y 创建的主题 问与答 求指导,怎样让自己脾气好起来
@Eddiegaao #34 V 站用户算是最自私自利的一群了,我已经多次观察到支持这种观点的言论,包括这个帖子,你对这个破站的期望值有点高
34 天前
回复了 mx3y 创建的主题 问与答 求指导,怎样让自己脾气好起来
@broken123 你享受了这个橛子给你带来的社会风气,请善待这个橛子
35 天前
回复了 aeucon 创建的主题 生活 大家来评评理,是我太矫情吗?
确实太矫情,过来人告诉你,甚至两个人的饭菜都可以各做一套自己喜欢吃的,而不是强求对方要跟自己一样
可能是你长了息肉或者痔疮
不想离开舒适区而已
1  2  3  4  5  6  7  8  9  10 ... 209  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1283 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 43ms · UTC 17:42 · PVG 01:42 · LAX 09:42 · JFK 12:42
Developed with CodeLauncher
♥ Do have faith in what you're doing.