4

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

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

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

请不要建议使用 Profiler。我不打算调试或基准测试性能。但只是想在生产 24/7 的基础上对其进行跟踪。

4

1 回答 1

6

好吧,您需要一些代码来执行您的功能并分析您的功能,attribute以便它知道它需要在您的功能之前和之后执行某些操作(例如执行时间测量,在您的情况下) - 它可能使用装饰器设计模式,反射代理对象等等。

正如您所标记的,这是一个方面编程问题,例如,您可以利用PostSharp第三方来实现它。

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

为了详细说明@pasty 的评论,您可以使用 Unity DI Container拦截您的方法调用,确实需要编写更多代码,这里是 Unity 拦截功能的简单示例流程图:

显示此示例中涉及拦截行为的对象

注意第3步,代理对象实际上是返回给客户端的,因此实现了拦截行为。

于 2014-05-04T15:25:48.140 回答