2009-05-28 73 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的