作者brianhsu (坟墓)
看板java
标题Re: [问题] 关於android 的效能
时间Wed Oct 6 22:30:27 2010
※ 引述《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
1F:推 manlike:Think in Java and Android有最佳化的回圈写法~ 10/06 22:46