Re: [問題] 請益關於android在運算上的效能
※ 引述《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
討論串 (同標題文章)