我做错了,或者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块可能比卡上的文件系统块小。 –