我想使用一个属性来计时一个函数。我希望做类似这样的事情:
[TimeIt]
public MyFunc()
{
//do something
...
return;
}
执行此函数时,如果函数耗时超过阈值,则应使用log4net记录属性时间。
这类似于MVC ActionFilterAttribute的操作,但我不想使用MVC。
我想使用一个属性来计时一个函数。我希望做类似这样的事情:
[TimeIt]
public MyFunc()
{
//do something
...
return;
}
执行此函数时,如果函数耗时超过阈值,则应使用log4net记录属性时间。
这类似于MVC ActionFilterAttribute的操作,但我不想使用MVC。
除了像[PrincipalPermission]
这样的极少数情况(由运行时本身检测),属性仅仅是元数据,不会自动触发任何额外的代码。唯一的例外是通过像PostSharp这样的工具,在构建时定位这些属性并编织额外的代码。
在所有其他情况下,您都需要通过反射自己检查此属性,并编写代码来调用属性中的额外方法。这就是ASP.NET MVC所做的;它识别出预期的属性族并调用基类方法以使您的过滤器生效。
如果您正在编写插件框架,这可能是有意义的。如果是为了临时方法检测 - 您需要自己添加额外的代码才能使其正常工作。
更容易的方法可能是编写一个IDisposable
类型,在其被处理时写入经过的时间; 然后您可以执行以下操作:
using(new MyTimer("My label")) {
//... Your method
}
或许有点滥用 using
,但它应该能够工作。