封装方法调用
本文关键字:调用 方法 封装 | 更新日期: 2023-09-27 18:24:53
我有一些测量方法执行时间的机制。简单地说,在方法开始时我节省了时间,在方法结束时我节省时间,并比较这两个值。
但每次我想使用它时,我都需要更改方法体。
我正在寻找一种更干净的方式——比如有一个负责测量时间的对象,它可以封装方法调用——比如一些包装器,调用该方法,传递返回值,并在这个过程中测量时间。
此外,我知道这可能有点科幻,但有没有办法包装或附加到所有方法(甚至方法的子集)?例如,它也可以用于日志记录,比如"我正在调用具有参数YYY和返回值vas ZZZ的实例XXX的方法"?
我知道这样的东西在Java EE中是可能的
谢谢。
我使用了这个简单的方法:
TimeSpan TimeAction(Action action)
{
var sw = new Stopwatch();
sw.Start();
action.Invoke();
sw.Stop();
return sw.Elapsed;
}
这就是如何使用
var time = TimeAction(() =>
{
//your code here
});
我正在使用一个具有IDispable接口的Stopwatch Wrapper来测量方法/代码块的执行时间。
public class AutoStopwatch : IDisposable
{
private Stopwatch autoStopwatch;
private String method;
public AutoStopwatch(String Method)
{
this.method = Method;
autoStopwatch = Stopwatch.StartNew();
}
public void Dispose()
{
autoStopwatch.Stop();
Debug.Print(string.Format("Elapsed for {0} : {1}", method, autoStopwatch.Elapsed.ToString()));
}
}
}
//示例
using (AutoStopwatch Awatch = new AutoStopwatch("Read Keys from REDIS"))
{
// Your Stuff
}:
这里的一个好方法是使用面向方面的编程,比如PostSharp。。。下面是使用它进行时间测量的示例:http://theburningmonk.com/2010/03/aop-method-execution-time-watcher-with-postsharp/
优点是,您只需向方法添加一个属性,而不必更改/"污染"方法体。
干杯,Christian
PostSharp Aspects可能会对您有所帮助,请查看其功能页面上的示例:
http://www.sharpcrafters.com/postsharp/features