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

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

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

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

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

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

對(duì)象創(chuàng)建

*輕量對(duì)象代替重量對(duì)象

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

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

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

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

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

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

對(duì)象調(diào)整

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

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

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

對(duì)象銷(xiāo)毀

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

布局計(jì)算

* 視圖布局的計(jì)算是App中最為常見(jiàn)的消耗CPU資源的地方

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

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

Autolayout

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

文本渲染

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

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

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

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

圖片的解碼

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

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

圖像的繪制

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

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

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

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

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

紋理的渲染

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

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

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

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

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

視圖的混合

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

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

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

圖形的生成

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

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

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

* 圓角圖片遮擋

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

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

    關(guān)注

    68

    文章

    10863

    瀏覽量

    211779

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

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

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

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

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

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

    求一種TI PFC+LLC解決方案

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

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

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

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

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

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

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

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

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

    CPU提供了哪些資源,如何評(píng)估CPU資源消耗

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

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

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

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

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

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

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

    高可靠性組件和解決方案

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

    PCB金手指設(shè)計(jì)的常見(jiàn)問(wèn)題和解決方案

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

    高校電能消耗管理存在的問(wèn)題和解決方案

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