: : 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 填入完全相同的
: 值的事情……
其實用fill...這是我在po文的時候隨手打上去的
原先是會先過一定的運算後,陣列裡面才有值
再白話一點講,以上的「運算」都2秒內就結束了
我只是在po這篇文章的時候用個fill...去把他代替掉XD
所以以上的事情我暫時不太擔心到效能
: : //以上大概總共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 物件,
: 然後又把他給丟了,只留最後一次的運算結果。
: : }
: : }
: : }
: : }
: 我看太不出來你的這段程式到底想要達成什麼,不過基本上調 performance
: 最基本的大概就以下幾點:
: 1. 盡量簡少建立物件,建立物件,GC 回收用不到的物件 overhead 都不小
: 2. 記住 String 是 immutable 的,如果真的需要不斷 append,那麼
: StringBuffer 是你的好朋友(理由同上)。
: 3. 如果是 UI 不順,試著把演算法用另一個 Thread 跑,再去 Update
: UI,那麼就算實際上演算法沒有變得比較好,但 user 也會感覺程
: 式比較順一點。
謝謝您的回應 :) 對我幫助很大
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.127.72.91
→
10/06 23:20, , 1F
10/06 23:20, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):