Re: [問題] 關於android 的效能
※ 引述《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
10/06 22:46, 1F
推
10/06 23:15, , 2F
10/06 23:15, 2F
討論串 (同標題文章)