android - 由于 JIT,BouncycaSTLe AES 256 多线程解密速度下降

标签 android encryption aes jit bouncycastle

我正在编写加密照片的应用程序,尽管它需要解密并在类似 Activity 的画廊中显示缩略图。当然,您可以单击并查看不同 Activity 中的完整尺寸图像。 我正在使用 AES/CBC/PKCS7Padding 密码和 256 位 key 。我使用 PBEWithSHA256And256BitAES-CBC-BC 派生 key 并将其存储到内存中。然后,所有需要进行加密/解密的线程都使用内存中的该 key 来初始化 Cipher 对象。

所以这是我的问题。当我同时解密许多图像(假设我需要显示图库)并且在尝试解密全尺寸图像后,速度非常慢。另一方面,如果我只解密一个图像(无论大小),然后转到图库然后解密全尺寸图像,速度非常快。

我真的很困惑。

那我做错了什么?也许 Bouncy CaSTLe 加密库不是线程安全的?

更新:我发现这个问题与 JIT 有关。禁用 JIT 可以完全消除任何处理速度差异。任何人都可以帮助理解如何优化代码,以在使用多线程解密照片时强制 JIT 编译代码的正确部分,以获得与一开始只解密一张照片相同的速度?

最佳答案

根据我们上面的讨论,性能下降的一个可能的罪魁祸首是大量的工作线程。限制线程数量的一种可能方法是使用固定(或有上限)的线程池,使用 java.util.concurrent 中找到的类。

您可以使用合适的Executors静态工厂方法创建固定线程池执行服务。然后,您可以使用返回的 ExecutorService 实例的 submit() 方法创建异步任务来解密各个缩略图并填充 GridView 单元格。

另一种可能性可能是新的 Loaders API (developer.android.com),但我不确定。我现在正在阅读有关它们的内容供我自己使用。因此您可能需要查看文档。

另一个替代方案是 this answer (stackoverflow.com)。

关于android - 由于 JIT,BouncycaSTLe AES 256 多线程解密速度下降,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10438120/

相关文章:

java - 如何在我的 MainActivity(或应用程序)开始时隐藏 fragment ?

android - 无法导入 google Analytics V4?

android - 如何为视频捕获添加日期/时间?

file - encfs 未挂载文件夹

php - openssl_encrypt() 随机失败 - 传递的 IV 仅为 ${x} 字节长,密码预计 IV 恰好为 16 字节

android + eclipse + maven + actionbarsherlock

ios - OSX 生成的 key 无法加密(SecKeyCreateRandomKey 和 SecKeyCreateEncryptedData)

ASP.Net MVC cookies - 防篡改?

Java 默认加密/AES 行为

java - 在 Java 中使用 AES-128 加密