当前位置: 首页 > 知识库问答 >
问题:

Bouncycastle AES 256多线程解密速度因JIT而降低

长孙阳成
2023-03-14

我正在编写一个加密照片的应用程序,尽管它需要在类似画廊的活动中解密和显示缩略图。当然,您可以在不同的活动中单击并查看全尺寸图像。我正在使用AES/CBC/PKCS7Padding密码和256位密钥。我使用PBEWithSHA256and256biates CBC BC导出密码密钥,并将其存储到内存中。然后,所有需要进行加密/解密的线程都在使用内存中的密钥初始化密码对象。

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

我真的很困惑。

那么我做错了什么?也许Bouncy Castle Crypto库不是线程安全的?

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

共有1个答案

祁俊喆
2023-03-14

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

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

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

还有另一种选择是这个答案(stackoverflow.com)。

 类似资料:
  • 在添加admob横幅之前,表现确实不错,滚动流畅。 添加admob横幅后,滚动正在剪切,点击按钮take bit响应。另外,我看到消息显示我太多的工作主线! 关于如何修复它有什么建议吗?或者什么能帮助它变得更好?如何在启用admob横幅的情况下实现平滑滚动? 希望我不是唯一一个面临这个问题的人! 更新:

  • 问题内容: 我之所以这样问是因为我使用Python,但是它也可以应用于其他解释语言(Ruby,PHP,JavaScript)。 每当我在代码中留下评论时,我是否会放慢解释器的速度?根据我对解释器的有限了解,它以字符串形式读取程序表达式,然后将这些字符串转换为代码。似乎每次解析评论时都是浪费时间。 是这样吗 是否有一些解释性语言的注释约定,或者其影响可以忽略不计? 问题答案: 对于Python而言,

  • 问题内容: 我已经用Python编写了一个工作程序,该程序基本上可以解析一批二进制文件,然后将数据提取到数据结构中。每个文件大约需要一秒钟的时间来解析,这意味着数千个文件要花费数小时。我已经成功实现了线程解析的线程版本的批处理解析方法。我在100个具有不同线程数的文件上测试了该方法,并对每次运行进行了计时。结果如下(0个线程是指我的原始,预线程化代码,1个线程是指生成一个线程的新版本)。 尽管生成

  • 本文向大家介绍快速了解Boost.Asio 的多线程模型,包括了快速了解Boost.Asio 的多线程模型的使用技巧和注意事项,需要的朋友参考一下 Boost.Asio 有两种支持多线程的方式,第一种方式比较简单:在多线程的场景下,每个线程都持有一个io_service,并且每个线程都调用各自的io_service的run()方法。   另一种支持多线程的方式:全局只分配一个io_service,

  • 我有一个由1B记录组成的大型数据集,由于Apache spark提供的可扩展性,我想使用它运行分析,但我在这里看到了一个反模式。我向spark集群添加的节点越多,完成时间就越长。数据存储是Cassandra,查询由Zeppelin运行。我尝试过许多不同的查询,但甚至是对<code>数据帧的简单查询。count()的行为如下。 这是齐柏林飞艇笔记本临时表有18M记录 当针对不同数量进行测试时。这些是

  • 下面的代码取自一个用G++编译的示例。多线程比单线程快2倍。 我在Visual Studio2019中执行它,结果恰恰相反:单线程比多线程快2倍。 但是,如果我对我的函数做一个小的修改,如下所示: 多线程的性能更好。我想知道是什么导致了这种行为(在实现方面有哪些可能的差异解释了它)。 此外,我还使用www.onlinegdb.com上的gcc进行了编译,结果与我的计算机中的Visual Studi