我做錯了,或者Android的JVM實現SHA1是痛苦的慢?我的代碼如下:Android的SHA1是痛苦的緩慢
in = new FileInputStream("/mnt/sdcard/200mb");
MessageDigest digester = MessageDigest.getInstance("sha1");
byte[] bytes = new byte[8192];
int byteCount;
int total = 0;
while ((byteCount = in.read(bytes)) > 0) {
total += byteCount;
digester.update(bytes, 0, byteCount);
Log.d("sha", "processed " + total);
}
這裏是日誌:
10-31 13:59:53.790 D/sha (3386): processed 4931584
10-31 13:59:54.790 D/sha (3386): processed 5054464
10-31 13:59:55.780 D/sha (3386): processed 5177344
大約是100K /秒,對我來說是不能接受的。
我正在使用物理設備(LG P990,2.2.2)。我能用Java獲得更好的結果嗎,還是必須查看JNI實現?
我玩過緩衝區大小 - 沒有顯着差異。
Traceview結果
所以它似乎是更新散列的瓶頸。
研究
這很有趣。當我嘗試2.3.2(SE Xperia)時,處理速度約爲12meg/sec。當我嘗試2.2(HTC Legend)時,速度比第一個設備還要慢。從2.3開始有什麼變化嗎?
將註銷移出循環並再次測試 –
以兆字節發生更改時打印消息的方式實施日誌記錄 - 結果相同(120kb/sec) – lstipakov
基準測試什麼是讀取時間和什麼是散列時間,您可能會花費更多的時間閱讀,你認爲你是。還可以嘗試使用不同的緩衝區大小,增加它可以幫助很多,8k塊可能比卡上的文件系統塊小。 –