作者sdallan ()
看板java
标题Re: [问题] 请益关於android在运算上的效能
时间Sat Nov 6 18:10:57 2010
※ 引述《qrtt1 (null)》之铭言:
: ※ 引述《sdallan ()》之铭言:
: : 情况是这样的。 小弟的专题测试在android的手机上,
: : 以下这段code 执行时间竟然要九秒...在同样的情况下,
: : 於pc上测的话约 0.04~0.06秒左右。 怎麽差这麽多...
: : 虽然两个测试环境的差距明显。不过我们目前在想办法要在
: : 手机上的计算效率再提高。碍於学识不足,我实在是不知道哪里还
: : 可以再提升,特来版上求解。
: : 这段code的用意在於,要将一个int阵列每个值,与2个bit做 AND。
: : 因为bit数有128个,找不到更好的资料型态去装他了。
: : 以下这段在测试上,总共会执行4800次。
: : int [] iArray = int [64];
: : String binaryString = "010101001011001010..."; //长度为128
: : //依阵列的长度
: : for ( int i = 0 ; i < iArray.length ; i++ ){
: : //把值做or後再and
: : iArray[i] = ( iArray[i] & 3 ) |
: : //转成2进制的数值
: : Integer.parseInt(
: : //一次切2个bit出来
: : binaryString.substring((0+LSB*i), (2+LSB*i)),2
: : )
: : }
: : 谢谢您耐心的看完他了。
: 如果你的PC是单核,如果你的CPU速度是 1GHz 以下。
: 那可能速度就不会差那麽多倍了。
: 另外,为什麽不采用 int[] 或 byte[] 来存你的 128 个 01
: 你用字串作,每一次的 substring 都在产生新的 String
: 还要再另外把它转成 int。
: 你要加快它在 Android 下跑的速度,要先避开这些奢侈的习惯。
谢谢您的回应。
关於资料型态的问题真的有些许的无奈。
该128长度的字串,其实是从 BigInteger 物件传来的
我们将一个极大的整数进行加密後,而直接使用
BigInteger.toString(2) 这样的方法将其转为2进制的表示方式
※关键在於大数直接转二进制的表示
我在想着,将其转成字串表示後,再切成 int [],
不也同样需先substring?也同样需一次的parseInt?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.127.72.91