Re: [問題] 關於android 的效能

看板java作者 (墳墓)時間15年前 (2010/10/06 22:30), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串2/3 (看更多)
※ 引述《sdallan ()》之銘言: : 手機 HTC Desire : 版本 2.1 : 最近在手機上實作的功能已經完成了,近期在減少執行時間的調整。 : 光是下面這段程式,在手機上跑完就要20幾秒 : for ( int y = 0 ; y < 50 ; y++ ){ : for ( int x = 0 ; x < 50 ; x++ ){ : for ( int c = 0 ; c < 3 ; c++ ){ : int [] block = new int [64]; : Arrays.fill( block , 255 ); ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 你做了 50*50*3 次建立 Array,再把 Array 填入完全相同的 值的事情…… : //以上大概總共2秒 : //若執行以下的話總共要20幾秒 : String result = ""; ^^^^^^^^^^^^^^^^^^^ 請記住 Java 的 String 是 immutable 的 : for ( int j = 0 ; j < block.length ; j++ ){ : result += (block[j] & 252); ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 你 create 了 50*50*3*64 次的 String 物件, 然後又把他給丟了,只留最後一次的運算結果。 : } : } : } : } : 稍微計算一下圈數 50*50*3*64 ,這個計算次數基本上是減不了了。 : 請問有辦法再減少這邊的執行時間嗎? 我看太不出來你的這段程式到底想要達成什麼,不過基本上調 performance 最基本的大概就以下幾點: 1. 盡量簡少建立物件,建立物件,GC 回收用不到的物件 overhead 都不小 2. 記住 String 是 immutable 的,如果真的需要不斷 append,那麼 StringBuffer 是你的好朋友(理由同上)。 3. 如果是 UI 不順,試著把演算法用另一個 Thread 跑,再去 Update UI,那麼就算實際上演算法沒有變得比較好,但 user 也會感覺程 式比較順一點。 -- ~ 白馬帶著她一步步地回到中原。白馬已經老了,只能慢慢地走, 'v' Brian Hsu 但終是能回到中原的。江南有楊柳、桃花,有燕子、金魚…… // \\ ( 墳 墓 ) /( )\ 但這個美麗的姑娘就像古高昌國人那樣固執。 【白馬嘯西風】 ^`~'^ http://bone.twbbs.org.tw/blog 『那都是很好很好的,可我偏不喜歡。』 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.42.198

10/06 22:46, , 1F
Think in Java and Android有最佳化的迴圈寫法~
10/06 22:46, 1F

10/06 23:15, , 2F
請問樓上是在說這本嗎 http://tinyurl.com/32rxey2 ?
10/06 23:15, 2F
文章代碼(AID): #1Ch8W6dv (java)
文章代碼(AID): #1Ch8W6dv (java)