.NET Profilers如何工作?

时间:2011-11-14 20:57:50

标签: c# .net performance

我正在考虑将诊断模式构建添加到我正在编写的应用程序中以计算方法使用和执行时间,类似于许多代码分析器(如dotTrace)所做的。

我在通过谷歌寻找资源方面遇到了一些麻烦,但是如何实现这一目标;显然它是可能的,但是有人能指出我如何在.NET中实现类似方法调用计数的一些资源吗?

2 个答案:

答案 0 :(得分:7)

代码项目文章Creating a Custom .NET Profiler描述了使用CLR分析器钩子创建分析器的过程。

这涉及创建一个实现ICorProfilerCallback2接口的COM对象,然后使用环境变量向CLR指示我们希望使用此类进行分析:

  

当CLR开始进程时,它会查找两个环境变量:

     
      
  • COR_ENABLE_PROFILING:此环境变量设置为1或0. 1表示CLR应使用分析器。 0(或此环境变量不存在)表示不应使用分析器。
  •   
  • COR_PROFILER:现在我们告诉CLR我们要分析,我们必须告诉它使用哪个分析器。由于分析器是作为COM对象实现的,因此该环境变量将设置为实现ICorProfilerCallback2接口的coclass的GUID。
  •   

答案 1 :(得分:1)

也许我在这里过于简单,但我对此的解决方案是记录。使用entlib或log4net并记录调试级别消息。然后你可以编写一个小脚本/程序来分析日志文件并给你方法计数。甚至可能还有其他日志诊断工具。

除非您需要丰富的可视化或实时复杂的关系映射等。您需要一个分析器吗?对于方法计数和执行时间,日志文件是否足够?一旦您投入生产或不关心仪器,您就可以提高日志记录级别并忘记这些调试消息。