.NET调试&跟踪性能:技巧/隐藏功能?

时间:2009-05-28 20:53:25

标签: .net performance debugging

您对在.NET技术中完成的每个应用程序的性能分析和优化中应该使用哪些技术有何看法? 您知道什么样的调试/跟踪技术可以很强大?
您是否认为在大型项目中有必要进行自定义调试/诊断课程? 您是否建议使用应用程序分析器或任何其他第三方应用程序?

另一个非常相关的问题:如何获得执行方法所花费的时间?

2 个答案:

答案 0 :(得分:1)

这是与语言无关的建议。如果您获得了experience doing performance tuning个现有应用程序,特别是较大的应用程序,您可以了解我所学到的知识。最大的性能杀手是过度设计:过多的抽象层,通知驱动的处理等等。问题在于,在抽象的情况下,让你的生活变得更轻松的小事最终会在你不知情的情况下吸引你进入大周期的浪费。

答案 1 :(得分:1)

这是一个非常通用的问题:)但是这里有一些指导

  1. 衡量您的应用的启动时间,如果启动是您的客户最关心的问题,请考虑使用Ngen服务,使用ngen服务(ngen.exe)对于冷启动具有相当大的性能
  2. Workingset和GC堆:你的gc堆是什么样的;特别是你的LOH。 CLR中的LOH不是压缩的,因此保持LOH较小或使用缓存技术重用LOH中的对象(大对象堆保存大于85000字节的对象)非常重要。
  3. 吞吐量:您可以执行多少操作,如果应用程序具有用户界面,则响应时间是多少,如果它是服务器应用程序,它可以处理多少请求..等等
  4. 关于诊断和跟踪,您可以使用System.Dignostics命名空间中的类,如TraceListner,您还可以考虑关键代码路径的ETW事件(MSDN中的事件跟踪对于Windows有很好的参考)。

    您可以在System.Dignostics命名空间中的内置类之上构建自己的自定义dignostic类。

    您需要在抓包中使用的几个非常有用的工具是VS Profiler,以及用于时间分析和内存分析的CLR分析器。

    您可以使用分析器对热门函数有一个高级概念,可以使用StopWatch类来测量某些选定方法的时间,或者对于高分辨率时序,您可以使用QueryPerformanceCounter和QueryPerformanceFrequency windows API

相关问题