iOS性能優化(一):Time Profile

參考鏈接:http://www.cnblogs.com/ym123/p/4324335.html

啟動Time Profile:Xcode ——> Product ——> Profile ——> Time Profile

使用Time Profiler調試程序,能獲取到整個應用程序運行中所消耗的時間分布和百分比

使用Time Profile前有兩點需要注意的地方:

1、一定要使用真機調試

在開始進行應用程序性能分析的時候,一定要使用真機。因為模擬器運行在Mac上,然而Mac上的CPU往往比iOS設備要快。相反,Mac上的GPU和iOS設備的完全不一樣,模擬器不得已要在軟件層面(CPU)模擬設備的GPU,這意味著GPU相關的操作在模擬器上運行的更慢,尤其是使用CAEAGLLayer來寫一些OpenGL的代碼時候,這就導致模擬器性能數據和用戶真機使用性能數據相去甚遠

2、應用程序一定要使用發布配置

在發布環境打包的時候,編譯器會引入一系列提高性能的優化,例如去掉調試符號或者移除并重新組織代碼。另iOS引入一種"Watch Dog"[看門狗]機制,不同的場景下,“看門狗”會監測應用的性能,如果超出了該場景所規定的運行時間,“看門狗”就會強制終結這個應用的進程。開發者可以crashlog看到對應的日志,但Xcode在調試配置下會禁用"Watch Dog"

啟動后如圖

點擊左上角紅色按鈕,開始調試

調試時注意右下方選項

Separate by Thread:每個線程應該分開考慮,只有這樣你才能揪出那些大量占用CPU的"重"線程

Invert Call Tree:從上倒下跟蹤堆棧,這意味著你看到的表中的方法,將已從第0幀開始取樣,這通常你是想要的,只有這樣你才能看到CPU中話費時間最深的方法,也就是說FuncA{FunB{FunC}} 勾選此項后堆棧以C->B-A 把調用層級最深的C顯示在最外面

Hide System Libraries:勾選此項你會顯示你app的代碼,這是非常有用的。因為通常你只關心cpu花在你自己寫的代碼上的時間 而不是花在系統代碼上的時間

Flatten Recursion:遞歸函數, 每個堆棧跟蹤一個條目

Top Functions:一個函數花費的時間直接在該函數中的總和,以及在函數調用該函數所花費的時間的總時間。因此,如果函數A調用B,那么A的時間報告在A花費的時間加上B花費的時間,這非常有用,因為它可以讓你每次下到調用堆棧時挑最大的時間數字,歸零在你最耗時的方法

最終調試界面如圖

雙擊選中行查看代碼

發現循環中的UIImage *image = [UIImage imageNamed:imageName];語句的時間消耗最長,度娘之:

UIImage初始化方法有兩種

A:imagedNamed初始化

B:imageWithContentsOfFile初始化

二者不同之處在于,imageNamed默認加載圖片成功后會內存中緩存圖片,這個方法用一個指定的名字在系統緩存中查找并返回一個圖片對象,如果緩存中沒有找到相應的圖片對象,則從指定地方加載圖片然后緩存對象,并返回這個圖片對象

而imageWithContentsOfFile則僅只加載圖片,不緩存

大量使用imageNamed方式會在不需要緩存的地方額外增加開銷CPU的時間來做這件事,當應用程序需要加載一張比較大的圖片并且使用一次性,那么其實是沒有必要去緩存這個圖片的,用imageWithContentsOfFile是最為經濟的方式,這樣不會因為UIImage元素較多情況下,CPU會被逐個分散在不必要緩存上浪費過多時間

使用場景需要編程時,應該根據實際應用場景加以區分,UIimage雖小,但使用元素較多問題會有所凸顯

文/戴尼瑪(簡書作者)

原文鏈接:http://www.lxweimin.com/p/c6961c355ae8

著作權歸作者所有,轉載請聯系作者獲得授權,并標注“簡書作者”。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 三類工具 基礎工具(NSLog的方式記錄運行時間) 性能工具,檢測各個部分的性能表現,找出性能瓶頸 內存工具,檢查...
    彭磊PL閱讀 790評論 0 0
  • 標簽: 采用Instruments 來分析整個應用程序的性能.發現很多有意思的點,以及性能優化和一些分析性能消耗的...
    皮皮瑞閱讀 1,645評論 1 2
  • 最近采用Instruments 來分析整個應用程序的性能.發現很多有意思的點,以及性能優化和一些分析性能消耗的技巧...
    ny5168閱讀 800評論 0 0
  • 最近采用Instruments 來分析整個應用程序的性能.發現很多有意思的點,以及性能優化和一些分析性能消耗的技巧...
    chenkai閱讀 74,424評論 48 629
  • Instruments使用技巧 關于Instruments官方有一個很有用的用戶使用Guide,當然如果不習慣官方...
    iOS_Developer閱讀 644評論 0 0