按照固定的時間間隔析命,定時對線程中的調(diào)用堆棧進行采樣福也,獲取一個sample. 之后統(tǒng)計在這一時段內(nèi),某個方法出現(xiàn)在sample中次數(shù)孽椰。以此來表示該函數(shù)的運行情況
一讲竿、打開Instruments 再打開Time Profiler
啟動Xcode -> Instruments
二、點擊開始運行按鈕弄屡,運行目標(biāo)APP
Weight
Doesn’t measure duration. Aggregates samples into a useful summary.
weight的前面可以看到也有ms的時間题禀。但是weight不代表duration. 這是 采樣次數(shù)*采樣間隔。采樣間隔通常是1ms
所以更合理的觀察方法是參考Weight的百分比值膀捷。
Self Weight
該函數(shù)在自己的函數(shù)體內(nèi)花費的時間迈嘹。有的函數(shù)A內(nèi)部只是簡單調(diào)用其他函數(shù)B。這時A的Weight雖然可能高,但是它的Self Weight幾乎為0. 可以進一步觀察其子函數(shù)B. Weight高并且Self weight也高的是真正耗時的函數(shù)秀仲。
Call Tree
點擊下方Call Tree按鈕融痛,可以看到有一些勾選項
Hide System Libraries。
這個很有用神僵,可以屏蔽掉系統(tǒng)的的調(diào)用雁刷。這部分通常不是關(guān)注的Invert Call Tree
堆棧默認(rèn)是從上往下顯示的。勾選這個后會反向顯示保礼,可以把耗時的子調(diào)用直接顯示出來沛励。其他也有各自的功能
圖形顯示區(qū)域
- 可以拖動游標(biāo),選定只觀察某一個時間范圍內(nèi)的采樣數(shù)據(jù)炮障。
- 可以點擊左側(cè)MainThread欄目派,從而只觀察發(fā)生在MainThread上的采樣數(shù)據(jù)
- 使用
option +
和option -
來zoom in
和zoom out
- 堆棧顯示面板,按住
option
點擊箭頭胁赢,可以把子調(diào)用樹全部展現(xiàn)企蹭,不用一級一級點。
符號加載
對檢測到的我們項目自己的函數(shù)智末,Instrument有時顯示的只是函數(shù)地址谅摄,這是因為app相關(guān)的符號文件沒有加載進來。
如果有app該版本的符號文件系馆,可以 Menu -> Files -> Symbols送漠。 分別選擇app以及framework的符號文件。
tips: 如果是debug模式的包它呀,默認(rèn)pod庫編譯的framework是沒有符號的螺男。如果需要,可以在Xcode的面板中選擇 Pods -> Project Pods -> Build Settings -> Build Options -> Debug Information Format -> DWARF with dSYM File
三纵穿、工具欄設(shè)置下隧,方便快速定位問題
Separate by State : 線程分離,狀態(tài)分開顯示 谓媒,例如:Running狀態(tài)淆院,
Separate by Thread : 線程分離, 每個線程分開顯示,只有這樣 才能在調(diào)用路徑中能夠清晰看到占用CPU耗時最大的線程.
Invert Call Tree : 從上到下跟蹤堆棧信息.這個選項可以快捷的看到方法調(diào)用路徑最深方法占用CPU耗時,比如FunA{FunB{FunC}},勾選后堆棧以C->B->A把調(diào)用層級最深的C顯示最外面.
Hide System Libraries : 隱藏系統(tǒng)調(diào)用,只關(guān)注自己代碼的耗時
Flatten Recursion : 遞歸函數(shù), 每個堆棧跟蹤一個條目
Top Functions : 顯示某個函數(shù)的總時間句惯,A函數(shù)內(nèi)調(diào)用多個函數(shù)時土辩,可以顯示A函數(shù)的總耗時