封装方法调用

本文关键字:调用 方法 封装 | 更新日期: 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