.net Profiler收集长期指标?

时间:2012-11-22 09:18:29

标签: c# c++ profiler

我们有一个客户端/服务器应用程序,我想要对它们进行分析以创建指标,例如“平均登录时间为xx ms,其中xxx为最大值,x为最小值,自yyyy以来总共为xx登录”和等等。

我知道Equatec和ANTS分析器(我很喜欢)。但我认为他们不提供我需要的功能。

当然,我可以自己编写必要的函数,但我认为ANTS或Equatec可以自己做得很好,必须有一些方法来使用该功能。

我需要什么:

  • 尽可能多地收集有关函数调用的数据,同时仍保持合理的性能

  • 缩放会像(de)选择我不想监控的代码路径一样好

  • 将所有收集的数据保存在数据库中,无论是本地数据库还是远程SQL数据库

  • 如果该工具可以自行创建像ANTS这样的图形,那将会很酷,但原始数据就足够了

  • 代码是用C#3.5(服务器和客户端< - >服务器通信)和C ++(客户端GUI)编写的。监控C ++代码也很好(C#嵌入为COM对象),但暂时监控C#就足够了

这不是免费的,但必须进行测试试验。

2 个答案:

答案 0 :(得分:1)

Profilers更加以代码/功能为中心,对性能产生很大影响。另外,将您的代码推送给用户是不可能的 我认为您应该考虑使用log4net之类的日志框架作为代码,然后配置日志记录以将结果保存到数据库中,您可以使用它来分析性能数据。

答案 1 :(得分:0)

以下是我现在能想到的几个选项:

  1. 编写您自己的代码,专门为您要分析的功能计时(显而易见的最简单选项)。
  2. 使用效果计数器(System.Diagnostics.PerformanceCounter)。
  3. 使用.NET Profiling API
  4. 滚动您自己的探查器
  5. 使用性能工具包中名为Xperf的低级内置操作系统分析器。
  6. 编辑: 我怎么能忘记这个小宝石!

    MiniProfiler可以像这样包裹你的代码:

    var profiler = MiniProfiler.Current; // it's ok if this is null
    using (profiler.Step("Doing complex stuff")){
        using (profiler.Step("Step A"))
        { // something more interesting here
            Thread.Sleep(100);
        }
    
        using (profiler.Step("Step B"))
        { // and here
            Thread.Sleep(250);
        }
    }