正确的CryptoAPITransform使用? 内存泄漏

我已经移植了一个使用Crypto API的非托pipe代码到100%托pipe的.NET代码。 代码使用DESalgorithm,并且由于以下原因必须维护它。

由于从CreateDecryptor和CreateEncryptor方法得到的CryptoAPITransform实例被标记为可重用,我想只是创build它们的一个实例,并在需要时使用它们。

它看起来代码工作,但它造成内存泄漏,所以决定每次创build和处置一个实例。 到目前为止,它似乎没有泄漏,但我想知道如果我以前使用它错误,如果是的话,如果我可以重用的实例。

该应用程序是multithreading的,并且同时进行大量的操作,所以可能存在线程问题,尽pipe我无法find任何exception或损坏的消息。 另外,我所有的操作都是通过调用TransformFinalBlock 。 这听起来对吗? testing应用程序是乏味的,但我想我会尝试自己,如果同步线程停止泄漏任何机会。

这很可能是一个线程相关的错误。 从CryptoAPITransform文档 :

此类型的任何公共静态(在Visual Basic中为Shared)成员都是线程安全的。 任何实例成员不保证是线程安全的。

对于在线程中共享实例的所有类来说,看看“线程安全”文档是多么的重要。

我的猜测是,在这种情况下,类的实现依赖于某种状态来正确使用/处理非托管代码,并通过在多个线程中使用它们,导致无法正确处理这些代码。

所有这些都是当然的猜测。 我不知道这个班是如何在内部实施的。