2010-08-26 57 views
2

我是剖析中的一個虛擬角色,請告訴我您的人員如何分析您的應用程序。哪一個更好,分析整個應用程序或進行隔離?如果選擇是隔離你如何做到這一點?是否有任何技術可以單獨進行配置文件測試?

+0

我的意思是每個班級模塊等都是分開測試而不知道對方(抱歉也許不是一個正確的詞來表示它)。 – bonjorno 2010-08-26 12:19:32

回答

5

儘可能地解析整個應用程序,運行實(典型值)的工作量。除此之外,你冒險得到的結果會導致你將重點放在錯誤的地方。

編輯

是不是太硬剖析整個應用程序時得到正確的結果呢?所以測試結果取決於用戶交互(按鈕點擊等)而不使用自動任務?告訴我,如果我錯了。

獲得「正確結果」取決於您如何解釋分析數據。例如,如果你正在分析一個交互式應用程序,你應該找出配置文件的哪些部分對應於等待用戶交互,並忽略它們。

有許多與零件剖析應用程序的問題。例如:

  • 通過先確定應用程序的部分需要分析哪些,你沒有得到的不同部分的相對貢獻的良好形象,你的風險在錯誤的部分浪費精力。

  • 你幾乎必須使用人工工作量。每當你這樣做時,就有可能工作負載不能代表「正常」工作負載,而且你的性能分析結果有偏差。

  • 在許多應用中,瓶頸的方式是由於應用程序的各個部分彼此交互,或者與I/O或垃圾收集。單獨分析應用程序的不同部分很可能會錯過這些交互。

...我所尋找的是技術

粗略地說,你開始通過配置文件數據所確定的最大的「熱點」和深入,直到你想通出爲什麼這麼多都是在某個地區度過的。如果您的分析工具可以彙總數據並自上而下展示數據,這真的很有幫助。

但是,從分析證據(熱點,堆棧快照等)到根本原因以及補救措施的一天結束時,往往要歸功於來自經驗的實踐知識和直覺。

(是啊......我胡扯了一下。但我的觀點是,有沒有神奇的公式這樣做。最終,你必須使用你的大腦......就像你在調試時複雜的應用程序。)

+0

感謝您的快速回答,但是在分析整個應用程序時,是不是很難得到正確的結果?所以測試結果取決於用戶交互(按鈕點擊等)而不使用自動任務?告訴我,如果我錯了。 – bonjorno 2010-08-26 12:36:55

+0

@bonjomo:斯蒂芬是完全正確的。如果你專注於一個特定的模塊,那麼你實際上會帶來預判,而當你做這件事時,你首先要學習的是問題不在於你可能猜到它們的地方。如果您將整體分析爲一個整體,那麼問題會告訴您它們在哪裏。無需猜測。 – 2010-08-26 13:46:14

+0

我瘋狂地同意你到最後一段:-)我不在乎「熱點」的概念,也不在乎「鑽取」的方法,但我懷疑當我們下定決心的時候,我們'同樣的話。 – 2010-08-26 14:53:35

2

首先,我只是一個觀看時間它得到整體測量值。

然後我在調試器下運行它並採取stackshots。這些做的是告訴我哪些代碼行負責大部分時間。特別是,這意味着函數被調用的行不需要需要,以及我可能沒有意識到的I/O。

因爲它顯示了我需要時間的代碼行,並且可以以更好的方式完成,所以我修復了這些行。

然後我從頂部開始,看看我實際保存了多少時間。我重複這些步驟直到我再也找不到a)需要花費大量時間的事情,並且b)我可以修復。

這被稱爲「窮人的概況」。小祕密不僅便宜,而且非常有效,因爲它避免了common myths about profiling

P.S.如果它是一個交互式應用程序,那麼只需要對它的速度慢的部分進行處理,就像按下「Do Useful Stuff」按鈕並在幾秒鐘後完成一樣。在等待你時拍攝堆疊照片毫無意義。

P.P.S.假設有一些活動應該更快,但是過快完成堆疊拍攝,就像需要一秒鐘,但應該花費幾分之一秒。那麼你可以做什麼(暫時)圍繞循環包裝一個,迭代10或100次。這將花費足夠的時間來獲取樣本。在你加速之後,去掉循環。

+0

+1爲鏈接和+ 10對於這些鏈接的很好的答案,謝謝。我雖然寫了這個反駁我對斯蒂芬C答案的評論,所以它與原始答案有點不同。這是偉大的,但我應該選擇斯蒂芬接受答案 – bonjorno 2010-08-26 21:31:13

+0

@bonjorno:Thx。是。斯蒂芬說得很好。你點擊我的「常規按鈕」,性能調整不需要是一個偵探工作的過程,但可以更像是修剪一棵樹,即調用樹。這通常不是衆所周知的,所以我傾向於這樣說。 – 2010-08-26 23:16:07

相關問題