有没有办法从属性中测量C#函数执行时间?

时间:2014-05-04 15:24:06

标签: c# custom-attributes aop interception

我希望为系统中的某些重要功能调用发布自定义性能计数器。我想在生产环境中持续监控这些性能计数器。

我有没有办法用自定义属性标记某些函数,这些属性可以衡量执行给定函数所花费的时间?我希望避免注入自定义代码,从而使用监控代码污染与业务相关的功能。

属性中的代码如何跟踪执行函数所花费的时间?

请不要建议使用Profiler。我不打算调试或基准性能。但只是想在每周7天的生产中跟踪它。

1 个答案:

答案 0 :(得分:6)

嗯,你需要一些代码来执行你的函数并分析你的attribute所以它会知道它需要在你的函数之前和之后执行某些东西(例如你的情况下执行时间测量) - 它可能是使用Decorator设计模式,ReflectionProxy object等等。

在标记时,这是一个方面编程问题,您可以利用PostSharp第三方来实现它。

使用PostSharp查看有关性能计数器的这个特定页面,确实使用了属性:http://www.postsharp.net/aspects/examples/performance

要详细说明@ pasty的注释,你可以用Interception using Unity DI Container拦截你的方法调用,确实需要更多代码来编写,这里是Unity拦截功能的简单示例流程图:

shows the objects that are involved with interception behaviors in this example

注意步骤 3 ,其中代理对象实际返回给客户端,并且由此实现了拦截行为。