0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

CPU資源消耗的原因和解決方案

Dbwd_Imgtec ? 來源:未知 ? 作者:胡薇 ? 2018-05-16 17:48 ? 次閱讀

CPU資源消耗的原因和解決方案

對象創(chuàng)建

*輕量對象代替重量對象

* 不需要響應(yīng)觸摸事件的控件:CALayer顯示

* 對象不涉及UI操作,則盡量放到后臺線程創(chuàng)建

* 包含有CALayer的控件只能在主線程創(chuàng)建和操作

* 通過Storyboard 創(chuàng)建視圖對象時,其資源消耗會比直接通過代碼創(chuàng)建對象要大非常多,在性能敏感的界面里,storyboard不是一個好的技術(shù)選擇

* 盡量推遲對象創(chuàng)建的時間,并把對象的創(chuàng)建分散到多個任務(wù)中去。

* 對象的復(fù)用代價比釋放,創(chuàng)建新對象要小,這類對象應(yīng)當(dāng)盡量放到一個緩存池里復(fù)用

對象調(diào)整

* CALayer:CALayer內(nèi)部并沒有屬性,當(dāng)調(diào)用屬性方法時,它內(nèi)部是通過運行時resolveInstanceMethod為對象臨時添加一個方法,并把對應(yīng)屬性值保存到內(nèi)部的一個Dictionary里,同時還會通知delegate,創(chuàng)建動畫等等,非常消耗資源。

* UIView的關(guān)于顯示相關(guān)的屬性(frame/bound/transform)等實際上都是CALayer屬性映射來的,所以對UIView的這些屬性進(jìn)行調(diào)整時,消耗的資源要遠(yuǎn)大于一般的屬性,所以,盡量減少不必要的屬性修改

* 當(dāng)視圖層次調(diào)整時,UIView,CALayer之間會出現(xiàn)很多方法調(diào)用與通知,所以,應(yīng)盡量避免調(diào)整視圖層次,添加和移除視圖。

對象銷毀

把對象捕獲到block中,然后扔到后臺隊列去隨便發(fā)送個消息以避免編譯器警告,就可以讓對象在后臺線程銷毀了。

布局計算

* 視圖布局的計算是App中最為常見的消耗CPU資源的地方

* 在后臺線程提前計算好視圖布局,并且對視圖布局進(jìn)行緩存

* 用任何技術(shù)對視圖進(jìn)行布局,最終都會落到對UIView.frame/bounds/center等屬性的調(diào)整上 對象調(diào)整:非常消耗資源,所以盡量提前計算好布局,在需要時一次性調(diào)整好對應(yīng)屬性,而不要多次,頻繁的計算和調(diào)整這些屬性。

Autolayout

不手動調(diào)整frame 等屬性,可以用常見的快捷屬性:left/right/top/bottom/width/height,或使用ComponentKit,AsyncDisplayKit等框架

文本渲染

* 所有的文本內(nèi)容控件,在底層都是通過CoreText排版,繪制為Bitmap顯示的。

* 常見的文本控件(UILabel,UITextView),其排版和繪制都是在主線程進(jìn)行的,當(dāng)顯示大量文本時,CPU的壓力會非常大。

* 解決方案:自定義文本控件,用TextKit或底層的CoreText對文本異步繪制

* CoreText對象創(chuàng)建好后,能直接獲取文本的寬高信息,避免了多次計算(調(diào)整UILabel大小時算一遍,UILabel繪制時內(nèi)部再算一遍),CoreText對象占用內(nèi)存較少,可以緩存下來供稍后多次渲染。

圖片的解碼

* 用UIImage 或CGImageSource創(chuàng)建圖片時,圖片數(shù)據(jù)不會立刻解碼。圖片設(shè)置到UIImageView或者CALayer.contents中去,并且CALayer被提交到GPU前,CGImage中的數(shù)據(jù)才會得到解碼。 _發(fā)生在主線程,不可避免。

* 后臺線程先把圖片會知道CGBitmapContext中,然后從Bitmap直接創(chuàng)建圖片。

圖像的繪制

* 圖像繪制:以CG開頭的方法把圖像繪制到畫布中,然后從畫布創(chuàng)建圖片并顯示 如:[UIView drawRect:]

* CoreGraphic 方法通常是線程安全的,圖像的繪制可以放到后臺線程進(jìn)行

GPU 資源消耗原因和解決方案

GPU:接收提交的紋理和頂點描述(三角形),應(yīng)用變換(transform),混合并渲染,然后輸出到屏幕上。

所看到的內(nèi)容:紋理和形狀(三角形模擬的矢量圖形)

紋理的渲染

* 所有的Bitmap ,包括圖片,文本,柵格化的內(nèi)容,最終都要由內(nèi)存提交到顯存,綁定為GPU Texture.

* 提交到顯存的過程,GPU調(diào)整和渲染Texture的過程,都要消耗不少GPU資源

* 當(dāng)在較短時間顯示大量圖片(TableView存在非常多的圖片并且快速滑動時),CPU占有率很低,GPU占有非常高,界面仍然會掉幀。

* 盡量減少在短時間內(nèi)大量圖片的顯示,盡可能將多張圖片合成為一張進(jìn)行顯示。

* 圖片過大,超過GPU的最大紋理尺寸時,圖片需要先由CPU進(jìn)行預(yù)處理,這對CPU和GPU都會帶來額外的資源消耗。iPhone4S以上機型,紋理尺寸上限4096*4096

視圖的混合

* 當(dāng)多個視圖(CALayer)重疊在一起顯示時,GPU會首先把他們混合到一起。如果視圖結(jié)構(gòu)過于復(fù)雜,混合的過程也會消耗很多GPU資源。

* 應(yīng)用應(yīng)當(dāng)盡量減少視圖數(shù)量和層次,并在不透明的視圖里標(biāo)明opaque屬性以避免無用的Alpha通道合成。

* 把多個視圖預(yù)先渲染為一張圖片來顯示。

圖形的生成

* CALayer的border,圓角,陰影,遮罩(mask),CASharpLayer的矢量圖形顯示,通常會觸發(fā)離屏渲染(offscreen rendering),而離屏渲染通暢發(fā)生在GPU中。

* 當(dāng)一個列表視圖中出現(xiàn)大量圓角的CALayer,并且快速滑動時,可以觀察到GPU資源已經(jīng)占滿,而CPU資源消耗很少。界面仍然能正常滑動,但平均幀數(shù)會降到很低

* 避免這種情況,可以嘗試開啟CALayer.shouldRasterize(柵格化)屬性,但這會把原本離屏渲染的操作轉(zhuǎn)嫁到CPU上去。

* 圓角圖片遮擋

* 把需要顯示的圖形在后臺線程繪制為圖片,避免使用圓角,陰影,遮罩等屬性。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10698

    瀏覽量

    209330

原文標(biāo)題:iOS構(gòu)建流暢的交互界面—CPU,GPU資源消耗的原因和解決方案

文章出處:【微信號:Imgtec,微信公眾號:Imagination Tech】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    2009最新LED路燈技術(shù)設(shè)計和解決方案

    2009年11月19-20日,OFweek光電新聞網(wǎng),LEDWeekly將舉辦“2009最新LED路燈技術(shù)設(shè)計和解決方案”系列在線研討會。歡迎朋友們參加, 詳細(xì)情況看這里~: http://webinar.ofweek.com/index.action?user.id=2 有興趣的朋友可以來參加! 
    發(fā)表于 11-08 23:57

    儀表放大器--常見的應(yīng)用問題和解決方案

    儀表放大器--常見的應(yīng)用問題和解決方案很完整的資料!
    發(fā)表于 12-15 09:53

    無線傳感器網(wǎng)絡(luò)的挑戰(zhàn)和解決方案

    無線傳感器網(wǎng)絡(luò)的挑戰(zhàn)和解決方案
    發(fā)表于 09-17 06:53

    求一種TI PFC+LLC解決方案

    的網(wǎng)絡(luò)資源下圖所示為常見的工業(yè)電源拓?fù)洌篜FC LLC的明星產(chǎn)品和解決方案:下圖所示為PFC控制器的產(chǎn)品線推薦:UCC28180是一個8pin芯片,易于使用。UCC28070是一...
    發(fā)表于 12-28 08:04

    ADI鋰電池測試設(shè)備和解決方案

    ADI鋰電池測試設(shè)備和解決方案
    發(fā)表于 09-08 16:23 ?15次下載
    ADI鋰電池測試設(shè)備<b class='flag-5'>和解決方案</b>

    PFC+LLC的產(chǎn)品和解決方案分析

    PFC LLC英雄產(chǎn)品和解決方案
    的頭像 發(fā)表于 05-29 09:05 ?1w次閱讀
    PFC+LLC的產(chǎn)品<b class='flag-5'>和解決方案</b>分析

    熱失控的產(chǎn)生原因和解決方案

    熱失控對電子設(shè)備的威脅日益加劇,原因在于電子設(shè)備中越來越大的功率被壓縮于愈加緊湊的空間 當(dāng)中;傳統(tǒng)方法無法妥善應(yīng)對這種威脅。SMD溫度保險絲提供了一種解決方案,可實現(xiàn)260°C回流 焊,又能在達(dá)到210°C時熔斷。
    的頭像 發(fā)表于 09-14 12:17 ?1.1w次閱讀
    熱失控的產(chǎn)生<b class='flag-5'>原因</b><b class='flag-5'>和解決方案</b>

    Java:調(diào)用window的matlab遇到的問題和解決方案

    Java:調(diào)用window的matlab遇到的問題和解決方案
    的頭像 發(fā)表于 06-20 09:32 ?3224次閱讀
    Java:調(diào)用window的matlab遇到的問題<b class='flag-5'>和解決方案</b>

    CPU提供了哪些資源,如何評估CPU資源消耗

    上面的圖和文字摘自ETSI GS NFV-TST 008,呈現(xiàn)的是一個物理CPU注1能夠被測量的幾個資源維度和他們之間的對應(yīng)關(guān)系。
    的頭像 發(fā)表于 01-22 09:09 ?9770次閱讀
    <b class='flag-5'>CPU</b>提供了哪些<b class='flag-5'>資源</b>,如何評估<b class='flag-5'>CPU</b><b class='flag-5'>資源</b>的<b class='flag-5'>消耗</b>

    無線傳感器網(wǎng)絡(luò)的挑戰(zhàn)和解決方案

    無線傳感器網(wǎng)絡(luò)的挑戰(zhàn)和解決方案
    發(fā)表于 03-19 04:28 ?4次下載
    無線傳感器網(wǎng)絡(luò)的挑戰(zhàn)<b class='flag-5'>和解決方案</b>

    AN-1429: 手機中耳機驅(qū)動的設(shè)計考慮和解決方案

    AN-1429: 手機中耳機驅(qū)動的設(shè)計考慮和解決方案
    發(fā)表于 03-20 13:06 ?7次下載
    AN-1429: 手機中耳機驅(qū)動的設(shè)計考慮<b class='flag-5'>和解決方案</b>

    無線傳感器網(wǎng)絡(luò)的挑戰(zhàn)和解決方案

    無線傳感器網(wǎng)絡(luò)的挑戰(zhàn)和解決方案
    發(fā)表于 03-21 13:41 ?1次下載
    無線傳感器網(wǎng)絡(luò)的挑戰(zhàn)<b class='flag-5'>和解決方案</b>

    高可靠性組件和解決方案

    高可靠性組件和解決方案
    發(fā)表于 04-26 14:38 ?6次下載
    高可靠性組件<b class='flag-5'>和解決方案</b>

    PCB金手指設(shè)計的常見問題和解決方案

    PCB金手指設(shè)計的常見問題和解決方案
    的頭像 發(fā)表于 12-25 10:09 ?1550次閱讀

    高校電能消耗管理存在的問題和解決方案

    摘要: 2013年1月,住建部發(fā)布《綠色建筑行動方案》(國辦發(fā)「2013」1號)。要求學(xué)校、醫(yī)院等大型公共建筑全面執(zhí)行綠色建筑標(biāo)準(zhǔn)。安全耐久、生活便利不再是綠色建筑的評價唯一指標(biāo),資源節(jié)約、環(huán)境宜居
    的頭像 發(fā)表于 07-02 10:17 ?345次閱讀
    高校電能<b class='flag-5'>消耗</b>管理存在的問題<b class='flag-5'>和解決方案</b>