C# 中的时间基准装饰器
我想(以优雅的方式)使用一些自定义方法属性,这将给我以下信息:
当我调用这样的方法 foo() 时,在某些属性中我将获得经过的时间(方法调用持续了多长时间)。
我怎样才能在 C# 中做到这一点?反思?
先感谢您。 詹姆斯
I would like (in an ELEGANT way) to use some custom method attribute which will give me this:
When I call such a method foo(), in some attribute I'll have the elapsed time (how long the method call lasted).
How can I do it in C#? Reflections?
Thank you in advance.
James
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
C# 不提供开箱即用的功能。你有几个选择:
C# doesn't offer this out of the box. You have a few choices:
StopWatch 类有什么问题?我经常使用它来分析关键代码中的一般时序。如果这还不够,我会改用 ANTS(或 dotTrace)。
What's wrong with the StopWatch class? I use it regularly for profiling general timings in critical code. If that's not enough, I'll switch to ANTS (or dotTrace).
聚苯乙烯
PostSharp 将按照您的意愿完成工作。
P.S.
PostSharp will do the work as you want it to be done.
在 C# 中无法拦截普通的旧方法调用。您必须对 C# 代码进行后(预)处理(如使用 PostSharp)才能真正实现这一目标。
或者,您可以编写一个基准测试方法,使用 lambda 来对一段代码进行计时,但这显然不是真正的装饰器。
There is no way to intercept a plain old method call in C#. You would have to post(pre)-process your C# code (like with PostSharp) to really achieve this.
Alternatively, you could write a benchmarking method that takes a lambda to time a chunk of code, but this is obviously not a true decorator.