私は、Crypto APIを使用して管理されていない古いコードを100%管理された.NETコードに移植しました。コードはDESアルゴリズムを使用しており、いくつかの理由でそれを維持しなければなりませんでした。CryptoAPITransformを正しく使用していますか?メモリリーク
CreateDecryptorおよびCreateEncryptorメソッドから取得したインスタンスが再利用可能とマークされているため、私はそれらのインスタンスを作成し、必要なときに使用することを考えました。
コードが正常に機能しているようですが、メモリリークの原因となりましたので、毎回インスタンスを作成して処分することにしました。これまで漏れていないようですが、前に間違って使用していたかどうかを知りたい場合は、インスタンスを再利用できるかどうかを知りたいと思います。
アプリはマルチスレッドであり、同時に多くの操作を行うため、例外や破損したメッセージを見つけることはできませんでしたが、スレッドの問題が発生する可能性があります。また、すべて私の操作はTransformFinalBlock
と呼んで行った。これはあなたに正しいと思いますか?アプリをテストするのは面倒ですが、スレッドを同期させると万が一漏れが止まったら自分で試してみます。
私は昨日あなたの答えの前にスレッドシナリオをテストして、メモリリークの根本的な原因であることを確認できました。とにかく、今のところ、さらにテストをせずに、私は毎回新しいインスタンスを作成することにしました。コールの同期化がより高価な極端な状況がありますが、それがより良いところもあります。また、私はここに来る前にMSDNのエントリー方法を読んでいましたが、これらの年の後、私はその種の情報をあまり信頼しておらず、他の開発者からの意見を聞きたいと思っています。 – Neverbirth
ああ、あなたは私を信用する前にMSDNドキュメント*ロング*を信用しなければなりません:-) –