2009-05-28 38 views
1

对于在.NET技术中完成的每个应用程序的性能分析和优化,我应该使用哪些技术,您有什么看法?
你知道哪种调试/跟踪技术可以强大吗?
您是否认为在大型项目中需要定制调试/诊断类?
你是否建议使用应用程序分析器或其他第三方应用程序?.NET调试和跟踪性能:技巧/隐藏功能?

另一个值得关注的问题是:如何获取执行方法所花费的时间?

回答

1

这是语言不可知的建议。如果您获得了现有应用程序的一些experience doing performance tuning,尤其是较大的应用程序,则可以了解我学到的内容。最大的性能杀手是过度设计:太多的抽象层,通知驱动的处理等等。问题在于,抽象的东西会让你的生活变得更轻松,但最终会让你在没有你知道的情况下陷入巨大的周期性浪费之中。

1

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

  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 APIs的