我是剖析中的一個虛擬角色,請告訴我您的人員如何分析您的應用程序。哪一個更好,分析整個應用程序或進行隔離?如果選擇是隔離你如何做到這一點?是否有任何技術可以單獨進行配置文件測試?
回答
儘可能地解析整個應用程序,運行實(典型值)的工作量。除此之外,你冒險得到的結果會導致你將重點放在錯誤的地方。
編輯
是不是太硬剖析整個應用程序時得到正確的結果呢?所以測試結果取決於用戶交互(按鈕點擊等)而不使用自動任務?告訴我,如果我錯了。
獲得「正確結果」取決於您如何解釋分析數據。例如,如果你正在分析一個交互式應用程序,你應該找出配置文件的哪些部分對應於等待用戶交互,並忽略它們。
有許多與零件剖析應用程序的問題。例如:
通過先確定應用程序的部分需要分析哪些,你沒有得到的不同部分的相對貢獻的良好形象,你的風險在錯誤的部分浪費精力。
你幾乎必須使用人工工作量。每當你這樣做時,就有可能工作負載不能代表「正常」工作負載,而且你的性能分析結果有偏差。
在許多應用中,瓶頸的方式是由於應用程序的各個部分彼此交互,或者與I/O或垃圾收集。單獨分析應用程序的不同部分很可能會錯過這些交互。
...我所尋找的是技術
粗略地說,你開始通過配置文件數據所確定的最大的「熱點」和深入,直到你想通出爲什麼這麼多都是在某個地區度過的。如果您的分析工具可以彙總數據並自上而下展示數據,這真的很有幫助。
但是,從分析證據(熱點,堆棧快照等)到根本原因以及補救措施的一天結束時,往往要歸功於來自經驗的實踐知識和直覺。
(是啊......我胡扯了一下。但我的觀點是,有沒有神奇的公式這樣做。最終,你必須使用你的大腦......就像你在調試時複雜的應用程序。)
感謝您的快速回答,但是在分析整個應用程序時,是不是很難得到正確的結果?所以測試結果取決於用戶交互(按鈕點擊等)而不使用自動任務?告訴我,如果我錯了。 – bonjorno 2010-08-26 12:36:55
@bonjomo:斯蒂芬是完全正確的。如果你專注於一個特定的模塊,那麼你實際上會帶來預判,而當你做這件事時,你首先要學習的是問題不在於你可能猜到它們的地方。如果您將整體分析爲一個整體,那麼問題會告訴您它們在哪裏。無需猜測。 – 2010-08-26 13:46:14
我瘋狂地同意你到最後一段:-)我不在乎「熱點」的概念,也不在乎「鑽取」的方法,但我懷疑當我們下定決心的時候,我們'同樣的話。 – 2010-08-26 14:53:35
謝謝,但我正在尋找的是技術。 – bonjorno 2010-08-26 12:43:49
首先,我只是一個觀看時間它得到整體測量值。
然後我在調試器下運行它並採取stackshots。這些做的是告訴我哪些代碼行負責大部分時間。特別是,這意味着函數被調用的行不需要,需要,以及我可能沒有意識到的I/O。
因爲它顯示了我需要時間的代碼行,並且可以以更好的方式完成,所以我修復了這些行。
然後我從頂部開始,看看我實際保存了多少時間。我重複這些步驟直到我再也找不到a)需要花費大量時間的事情,並且b)我可以修復。
這被稱爲「窮人的概況」。小祕密不僅便宜,而且非常有效,因爲它避免了common myths about profiling。
P.S.如果它是一個交互式應用程序,那麼只需要對它的速度慢的部分進行處理,就像按下「Do Useful Stuff」按鈕並在幾秒鐘後完成一樣。在等待你時拍攝堆疊照片毫無意義。
P.P.S.假設有一些活動應該更快,但是過快完成堆疊拍攝,就像需要一秒鐘,但應該花費幾分之一秒。那麼你可以做什麼(暫時)圍繞循環包裝一個,迭代10或100次。這將花費足夠的時間來獲取樣本。在你加速之後,去掉循環。
+1爲鏈接和+ 10對於這些鏈接的很好的答案,謝謝。我雖然寫了這個反駁我對斯蒂芬C答案的評論,所以它與原始答案有點不同。這是偉大的,但我應該選擇斯蒂芬接受答案 – bonjorno 2010-08-26 21:31:13
@bonjorno:Thx。是。斯蒂芬說得很好。你點擊我的「常規按鈕」,性能調整不需要是一個偵探工作的過程,但可以更像是修剪一棵樹,即調用樹。這通常不是衆所周知的,所以我傾向於這樣說。 – 2010-08-26 23:16:07
- 1. 是否有任何二進制索引文件訪問技術?
- 2. 是否可以將URL重寫配置置於單獨的配置文件中?
- 3. 如何進行單元測試配置
- 4. 是否可以模擬GPU以進行CUDA/OpenCL單元測試?
- 5. 單元測試是否可以進行P/Invoke調用?
- 6. 是否可以對Cognos進行自動化單元測試?
- 7. 是否可以在CodeIgniter中對View進行單元測試?
- 8. 是否有我使用的測試技術的名稱?
- 9. 什麼技術可以用來使寫作測試更有趣?
- 10. TDD,你有什麼技術可以找到好的測試?
- 11. 如何確定現有的類是否可以進行單元測試?
- 12. 是否可以將NDbUnit測試數據保存在單獨的XML文件中?
- 13. 是否有可能在MVC4中對BundleConfig進行單元測試?
- 14. 可以單獨使用接口進行測試嗎?
- 15. 是否可以使用MSTest進行上下文/規範測試?
- 16. 正確單元測試技術
- 17. 是否有任何jquery插件或技術類似於任何:hover htc?
- 18. 是否可以讓多個cxf.xml文件配置系統的單獨部分?
- 19. 什麼是可用於Android內存測試的軟件測試技術?
- 20. 是否可以運行所有單元測試?
- 21. NUnit:是否可以配置NUnit測試失敗,如果沒有Assert執行
- 22. 技術上是否可行?使用Dart搭配Lift是否合理?
- 23. 是否有任何技術用標誌參數拆分方法?
- 24. 是否有任何技巧在apache cassandra上進行通配符搜索?
- 25. 是否可以從Scala的測試套件中運行單個測試?
- 26. 爲dll設置單獨的配置文件是否好設計?
- 27. SBT插件:是否可以爲單個測試運行腳本,而不是運行所有測試?
- 28. 是否可以調試在Visual Studio 2010中進行單元測試的代碼?
- 29. 什麼是無線技術的配置
- 30. 是否有可能在ServiceStack中對ValidationFeature插件進行單元測試
我的意思是每個班級模塊等都是分開測試而不知道對方(抱歉也許不是一個正確的詞來表示它)。 – bonjorno 2010-08-26 12:19:32