自动记录和统计(C#应用程序)

时间:2011-07-04 09:36:49

标签: c# logging attributes statistics

我正在考虑输入统计信息和某种登录程序的最佳方法。 1.有人在程序中有一篇关于统计数据的好文章吗? 2.我可以在调用计时器来测量运行时间的某个方法之前创建一个属性吗?例如

class A
{
  [RunTimer]
  public void Foo()
  {
     // do stuff
  }
}

修改
好吧,我们希望有机会在运行时控制统计数据,而不仅仅是ob dev或QA时间。

4 个答案:

答案 0 :(得分:5)

一个选项是创建一个高阶函数,用于计时目标函数并记录结果:

public static class TimingExtensions
{
    public static Func<R> Time<R>(this Func<R> target, Action<string> logger)
    {
        return delegate
        {
            System.Diagnostics.Stopwatch s = new System.Diagnostics.Stopwatch();

            s.Start();

            R value = target();

            s.Stop();

            logger("Function '" + target.Method.Name + "' elapsed ms: " + s.ElapsedMilliseconds); 

            return value;
        }; 
    }
}

但是如果你需要做一些重要的性能测试,那么那里也有框架。

答案 1 :(得分:4)

Performance Counters是你的朋友。 .NET Instrumentation Workshop是一篇很棒的文章,会引导您逐步完成整个过程。

一旦掌握了算法,就可以使用它们来监测各种统计数据。

另外,可以通过两种方式在运行时控制计数器:

  • 更改您的应用是否通过配置文件开关更新性能计数器
  • 通过PerfMon
  • 更改您跟踪的更新

这样,您不仅仅与开发代码绑定,而且还可以在生产代码中使用它们。当然,你可能不希望它们都在不断运行,这就是允许配置文件切换的用武之地。

答案 2 :(得分:4)

答案 3 :(得分:2)

如果您愿意使用PostSharp库,那么您可以使用他们的一些AOP-based performance counter examples.