C#使用属性计时功能

nsd*_*div 19 .net c# time attributes function

我想使用属性计时功能.我想做这样的事情:

[TimeIt]
public MyFunc()
{
//do something
...
return;
}
Run Code Online (Sandbox Code Playgroud)

已在此功能的执行,如果由函数所花费的时间高于阈值,则属性应该使用log4net的日志的时间.

这类似于MVC ActionFilterAttribute所做的,除了我不想使用MVC.

Mar*_*ell 14

属性(仅有一些非常少的例外,例如[PrincipalPermission]运行时本身发现的)元数据; 所以不要额外的代码神奇地被调用.例外的是PostSharp等工具,它在构建时定位这些属性并编织额外的代码.

在所有其他情况下,你必须检查这种通过反射自己的属性,并编写代码来调用从属性的额外的方法.这就是ASP.NET MVC的功能; 它标识了一个预期的属性系列,并调用基类方法来触发过滤器.

如果您正在编写插件框架,这可能是有意义的.如果是ad-hoc方法检测 - 如果没有您自己添加额外的代码,这将无法工作.

什么可能更容易为写一个IDisposable写入时,它被设置在经过时间的类型; 然后你可以这样做:

using(new MyTimer("My label")) {
    //... Your method
}
Run Code Online (Sandbox Code Playgroud)

也许是轻微的滥用,using但它应该工作.