私は写真を暗号化するアプリケーションを作成していますが、アクティベーションのようにギャラリーのサムネイルを復号化して表示する必要があります。もちろん、あなたはクリックして、さまざまな活動でフルサイズの画像を見ることができます。 私はAES/CBC/PKCS7Padding暗号を256ビット鍵で使用しています。私はPBEWithSHA256And256BitAES-CBC-BCを使用して暗号鍵を導き出し、それをメモリに格納する。その後、暗号化/復号化を行う必要があるすべてのスレッドは、その鍵を使ってCipherオブジェクトを初期化するメモリからそのキーを使用しています。Bouncycastle AES 256 JITのためにマルチスレッドの復号速度が低下する
ここに私の問題があります。私は多くの画像を同時に解読すると(ギャラリーを表示する必要があるとしよう)、フルサイズの画像を解読しようとすると、非常に遅いです。一方、もし私がちょうど1つのイメージを解読すれば(どんなサイズであろうと)、次にギャラリーに行き、フルサイズのイメージを解読するのは非常に高速です。
私は本当に混乱しています。
私は間違っていますか?たぶんBouncy Castle Cryptoライブラリはスレッドセーフではないでしょうか?
更新日:私はこの問題がJITに関連していることを知りました。 JITを無効にすると、処理速度の差が完全になくなります。誰もがコードを最適化して、マルチスレッドで写真を解読するときにJITを強制的にコンパイルするようにコードを最適化する方法を理解するのを助けることができますか?
スレッドセーフの意味はさまざまです。どのように弾みの城を使用していますか? – CodesInChaos
ユーザーはパスワードを入力し、PBEWithSHA256And256BitAES-CBC-BCアルゴリズムを使用して256ビットの暗号化キーを導き出します。次に、Cipher.getInstance( "AES/CBC/PKCS7Padding"、 "bc")を使用して復号化暗号を初期化します。私は標準のCipherInputStreamを使ってファイルを解読しています。それで全部です。 –
特に、スレッド間でインスタンスを共有する場合。 – CodesInChaos