C# 使用 Fody 监控方法执行时间

写在前面

在做性能调优的时候,经常需要跟踪具体方法的执行时间;通过插入Stopwatch的方案对代码的侵入性太高了,所以引入了 MethodTimer.Fody 类库,采用编译时注入的方式给方法动态加上Stopwatch 跟踪代码,只需要在目标方法上添加 Time 属性标签,即可实现注入。

需要到NuGet安装一下Fody 和 MethodTimer.Fody

PM> Install-Package Fody

PM> Install-Package MethodTimer.Fody

代码实现

cs 复制代码
    
// 方法执行时长记录器
public static class MethodTimeLogger
{
    public static void Log(MethodBase methodBase, long milliseconds, string message)
    {
        Console.WriteLine($"方法:{methodBase.Name} 耗时:{milliseconds}秒, 信息:{message}");
    }
}

// 测试目标类
public class MethodTracer
{
    [Time("跟踪测试")]
    public void TestMethod()
    {
        Console.WriteLine("TestMethod: 开始执行");
        Thread.Sleep(123);
    }
}

调用示例:

var methodTracer = new MethodTracer();

methodTracer.TestMethod();

执行结果:

注意事项

有个需要特别注意的事情,否则注入代码无法生效,在项目中添加 FodyWeavers.xml 文件并将属性设置为"始终复制"。

Xml文件内容如下:

XML 复制代码
<?xml version="1.0" encoding="utf-8"?>
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
  <MethodTimer />
</Weavers>

直接黏贴以下内容,vs会自动生成xsd

<Weavers>

<MethodTimer/>

</Weavers>

相关推荐
梦幻通灵14 分钟前
Java中finally失效的几种情况【持续更新】
java·开发语言
月落归舟19 分钟前
SpringMVC 多种响应返回方式
java·开发语言
长不胖的路人甲32 分钟前
二叉排序树(BST)Java 完整实现 + 删除思路详解
java·开发语言·算法
geovindu33 分钟前
python: Breadth First Search Algorithm and Depth First Search Algorithm
开发语言·后端·python·算法·搜索算法
向夏威夷 梦断明暄1 小时前
C# 弃元模式:从语法糖到性能利器的深度解析
服务器·数据库·c#
小大宇2 小时前
python sqlalchemy 案例
开发语言·python
名字还没想好☜2 小时前
Go 结构体内存对齐:调整字段顺序,同样的字段省下 40% 内存
开发语言·后端·golang·go·内存对齐
玛丽莲茼蒿2 小时前
很难出错的Spring5(十)—— IOC进阶
java·开发语言·jvm
Ulyanov3 小时前
雷达导引头仿真中的坐标系——从惯性系到量测角
开发语言·python·算法·系统仿真·雷达信号处理·雷达导引头
rick9773 小时前
C# × Python 互操不再难:DotNetPy 让两大生态真正融合
c#