【Xcode應用】iOS性能分析

性能分析工具

騰訊PerfDog

支持Android/iOS移動平臺,提供PerfDog軟件Windows&Mac版本。Android設備無需ROOT, iOS設備無需越獄,簡單易用。

可幫助我們輕鬆獲得 FPS、Jank、FTime、CPU、GPU、Memory、Battery 、Network、CTemp等性能參數。

包大小

APP的安裝包占用體積過大,可能會造成部分用戶的流失,主要原因:

  • App Store限制使用蜂窩網絡下載超過200MB的APP

AppStore下載超過200MB APP請求許可

  • 低端機磁盤空間小,無法安裝過多APP,對APP佔用空間數量比較敏感
  • 低端機運行內存少,APP運行過程中佔用內存過多,會導致APP處於前臺或者後臺時被系統殺掉,造成APP閃退

設置輸出Link Map文件:Xcode – Build Settings – Write Link Map File爲YES
編譯後可在如下位置找到該文件。

$(TARGET_TEMP_DIR)/$(PRODUCT_NAME)-LinkMap-$(CURRENT_VARIANT)-$(CURRENT_ARCH).txt

下載Link Map分析工具:

git clone https://github.com/huanxsd/LinkMap

選擇分組分析,可得到不同組件庫佔用的存儲大小。

LinkMap分析組件庫佔用磁盤大小

內存泄漏

Analyze

XCode – Debug – Analyze:(靜態內存泄漏檢測)

Leaks

Instruments – Leaks:(動態內存泄露檢測)

  • Leak by Backtrace:
    可以查看內存泄漏發生的對象、內存佔用大小、責任所在庫、責任所在方法堆棧,還支持搜索上述這些關鍵字。

  • Call Tree:
    勾選Invert Call Tree和Hide System Libraries,可以更清晰地看到自己編寫的代碼中的問題。

  • Leak Cycles:
    選擇泄漏的對象,可以查看循環引用情況。

CPU、內存佔用

iOS系統對APP進程性能參數做嚴格限制,超過限制則會引發OOM被系統kill,因此控制APP內存佔用很有必要。

Memory 是統計FootPrint,注:OOM與FootPrint有關,與系統、機型無關。只與RAM有關,如1G內存機器。

  • Xcode Memory (XCode Debug gauges統計方式即XCode Memory)
  • Real Memory(Xcode Instrument統計方式即Real Memory,實際佔用物理內存。注:物理內存系統策略有關,衡量內存指標時不會關注,但是它有助於分析定位整體性能問題。比如:footprint沒有降低,說明應用沒有釋放內存,但是real memory卻降低了,說明系統對內存做了壓縮。由於壓縮會佔用CPU資源,同時相應會導致FPS降低)
  • Virtual Memory(虛擬內存)

iPhone、iPad各機型發生閃退的內存閾值,總內存及其佔比(iOS APP最大內存閾值參考地址):

Device Crash Amount Total Amount Percentage of Total
iPad1 127MB 256MB 49%
iPad2 275MB 512MB 53%
iPad3 645MB 1024MB 62%
iPad4 585MB 1024MB 57% (iOS 8.1)
iPad Mini 1st Generation 297MB 512MB 58%
iPad Mini retina 696MB 1024MB 68% (iOS 7.1)
iPad Air 697MB 1024MB 68%
iPad Air 2 1383MB 2048MB 68% (iOS 10.2.1)
iPad Pro 9.7" 1395MB 1971MB 71% (iOS 10.0.2 (14A456))
iPad Pro 10.5” 3057 4000 76% (iOS 11 beta4)
iPad Pro 12.9” (2015) 3058 3999 76% (iOS 11.2.1)
iPad Pro 12.9” (2017) 3057 3974 77% (iOS 11 beta4)
iPad Pro 11.0” (2018) 2858 3769 76% (iOS 12.1)
iPad Pro 12.9” (2018, 1TB) 4598 5650 81% (iOS 12.1)
iPad 10.2 1844 2998 62% (iOS 13.2.3)
iPod touch 4th gen 130MB 256MB 51% (iOS 6.1.1)
iPod touch 5th gen 286MB 512MB 56% (iOS 7.0)
iPhone4 325MB 512MB 63%
iPhone4s 286MB 512MB 56%
iPhone5 645MB 1024MB 62%
iPhone5s 646MB 1024MB 63%
iPhone6 645MB 1024MB 62% (iOS 8.x)
iPhone6+ 645MB 1024MB 62% (iOS 8.x)
iPhone6s 1396MB 2048MB 68% (iOS 9.2)
iPhone6s+ 1392MB 2048MB 68% (iOS 10.2.1)
iPhoneSE 1395MB 2048MB 69% (iOS 9.3)
iPhone7 1395 2048MB 68% (iOS 10.2)
iPhone7+ 2040MB 3072MB 66% (iOS 10.2.1)
iPhone8 1364 1990MB 70% (iOS 12.1)
iPhone X 1392 2785 50% (iOS 11.2.1)
iPhone XS 2040 3754 54% (iOS 12.1)
iPhone XS Max 2039 3735 55% (iOS 12.1)
iPhone XR 1792 2813 63% (iOS 12.1)
iPhone 11 2068 3844 54% (iOS 13.1.3)
iPhone 11 Pro Max 2067 3740 55% (iOS 13.2.3)

Instruments – Activity Monitor

搜索過濾進程名稱,選擇Matches Any。通過Add Tag來標記對應的時間段,Live Processes結果中可以看到對應的Process Name和Momory。

Instruments – Time Profiler

檢測分析代碼的執行時間

Instruments – App Launch

分析APP啓動指定時間內的代碼執行情況

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章