一.工欲善其事必先利其器
-
time profile時間分析工具用來檢測應用CPU的使用情況,可以看到應用程式中各個方法正在消耗CPU時間,使用大量CPU不一定是個問題。客戶端中動畫就對CPU依賴就非常高,動畫本身也是非常苛刻且耗費資源較多的任務。
-
Time Profiler幫助我們分析程式碼的執行時間,找出導致程式變慢的原因,告訴我們“時間都去哪兒了?”。
-
Time Profiler分析原理:它按照固定的時間間隔來跟蹤每一個執行緒的堆疊資訊,通過統計比較時間間隔之間的堆疊狀態,來推算某個方法執行了多久,並獲得一個近似值。其實從根本上來說與我們的原始分析方法異曲同工,只不過其將各個方法消耗的時間統計起來。
二.使用Time Profiler前須知
-
1.當點選Time Profiler應用程式開始執行後.就能獲取到整個應用程式執行消耗時間分佈和百分比.為了保證資料分析在統一使用場景真實行有如下點需要注意:
-
在開始進行應用程式效能分析的時候,一定要使用真機,模擬器執行在Mac上,然而Mac上的CPU往往比iOS裝置要快。相反,Mac上的GPU和iOS裝置的完全不一樣,模擬器不得已要在軟體層面(CPU)模擬裝置的GPU,這意味著GPU相關的操作在模擬器上執行的更慢,尤其是使用CAEAGLLayer來寫一些OpenGL的程式碼時候. 這就導致模擬器效能資料和使用者真機使用效能資料相去甚運.
-
2.另外在開始效能分析前另外一件重要的事情是,應用程式執行一定要Release版本 而不是Debug版本.
-
在釋出環境打包的時候,編譯器會引入一系列提高效能的優化,例如去掉除錯符號或者移除並重新組織程式碼.另iOS引入一種"Watch Dog"[看門狗]機制.不同的場景下,“看門狗”會監測應用的效能。如果超出了該場景所規定的執行時間,“看門狗”就會強制終結這個應用的程式.開發者可以crashlog看到對應的日誌.但Xcode在除錯配置下會禁用"Watch Dog".
三.time profiler的主介面(幾個需要關注的重點區域)
檢視開關:分別為三個檢視的開關,全部選上可達到主介面截圖效果。
搜尋條:如果您需要快速查詢具體的類或函式,可在些輸入類名或者函式名,會有意想不到的效果。
資料視覺化皮膚:可在此設定您需要關注的範圍,以便將不相干的內容過濾掉。
詳情皮膚:在time profiler下主要是看Call Tree和Sample List這兩種檢視,一般使用Call Tree檢視,比較簡單明瞭:
Running Time:函式執行的時間,這個時間是累積時間
Self:在棧頂次數
Symbol Name:被呼叫函式的符號資訊
從詳情皮膚Call Tree與相關內容擴充套件詳情皮膚對應的關係圖:
樣本列表(Sample List)
Timestamp:取樣的開始時間
Dep:堆疊深度
CPU:執行緒執行在那一個CPU上
Process:程式名稱
Thread:所在的執行緒名稱
Hot Frame:取樣中呼叫最多的函式
Responsible Library:呼叫該函式的庫
Responsible Caller:呼叫該函式的函式
選項檢視引數設定
新版本在這裡設定
Separate by Thread(建議選擇):執行緒分離,只有這樣才能在呼叫路徑中能夠清晰看到佔用CPU最大的執行緒.每個執行緒應該分開考慮。只有這樣你才能揪出那些大量佔用CPU的"重"執行緒,按執行緒分開做分析,這樣更容易揪出那些吃資源的問題執行緒。特別是對於主執行緒,它要處理和渲染所有的介面資料,一旦受到阻塞,程式必然卡頓或停止響應。
Invert Call Tree(不建議選擇):呼叫樹倒返過來,將習慣性的從根向下一級一級的顯示,如選上就會返過來從最底層呼叫向一級一級的顯示。如果想要檢視那個方法呼叫為最深時使用會更方便些。
Hide Missing Symbols(建議選擇):隱藏丟失的符號,比如應用或者系統的dSYM檔案找不到的話,在詳情皮膚上是看不到方法名的,只能看一些讀不明的十六進值,所以對我們來說是沒有意義的,去掉了會使閱讀更清楚些。
Hide System Libraries(建議選擇):選上它只會展示與應用有關的符號資訊,一般情況下我們只關心自己寫的程式碼所需的耗時,而不關心繫統庫的CPU耗時。
Flatten Recursion(一般不選):選上它會將呼叫棧裡遞迴函式作為一個入口。
Top Functions(可選):選上它會將最耗時的函式降序排列,而這種耗時是累加的,比如A呼叫了B,那麼A的耗時數是會包含B的耗時數。
四.使用技巧
1.圖示為黑色頭像的就是Time Profiler給我們的提示,有可能存在效能瓶頸的地方
2.按著option鍵在主介面6中通過拖動滑鼠來選擇需要過濾的時間段
3.Command+F查詢過濾的函式名或者類名
4.關聯程式碼