代码之家  ›  专栏  ›  技术社区  ›  mati

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

  •  1
  • mati  · 技术社区  · 17 年前

    您对我应该在.NET技术中对每个应用程序的性能分析和优化中使用哪些技术有何看法?
    另外,您知道哪种调试/跟踪技术是强大的?
    您认为在大规模的项目中有必要有定制的调试/诊断类吗?
    您是否建议使用应用程序配置文件或任何其他第三方应用程序?

    另一个相当相关的问题是:我如何获得要执行的方法所花费的时间?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Community Mohan Dere    9 年前

    这是语言不可知论的建议。如果你得到一些 experience doing performance tuning 对于现有的应用程序,尤其是更大的应用程序,您可以了解我学到的东西。最大的性能杀手是过度设计:太多的抽象层、通知驱动的处理等等。问题是,那些本应使你的生活更容易的小事,抽象地说,最终会在你不知道的情况下,把你卷入大循环的浪费中。

        2
  •  1
  •   Albin Sunnanbo    15 年前

    这是一个非常普遍的问题:)但是这里有一些指导方针

    1. 衡量你的应用程序的启动时间,如果启动对你的客户来说是个大问题,考虑使用NGEN服务,使用NGEN服务(ngen.exe)对冷启动有相当大的性能。
    2. 工作集和GC堆:您的GC堆是什么样子的,特别是您的LOH。clr中的loh没有被压缩,所以保持loh较小,或者使用缓存技术重用loh中的对象是很重要的(大型对象堆包含大于85000字节的对象)。
    3. 吞吐量:你能做多少操作,如果你的应用有一个用户界面,它的响应时间是多少,如果它是一个服务器应用,它能处理多少请求等等。

    关于诊断和跟踪,可以使用System.Dignostics命名空间中的类,如TraceListner,还可以考虑关键代码路径的ETW事件(msdn中的Windows事件跟踪具有很好的参考)。

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

    抓取包中需要的两个非常有用的工具是vs profiler,以及分别用于时间分析和内存分析的clr profiler。

    您可以使用事件探查器对热函数有一个大致的高级概念,可以使用秒表类测量某些选定方法的时间,或者对于高分辨率计时,可以使用QueryPerformanceCounter和QueryPerformanceFrequency Windows API。

    推荐文章