6

MD5CryptoServiceProvider などの HashAlgorithm から派生したオブジェクトには Dispose() メソッドがありますが、これは非公開です。代わりに、それによって使用される「すべてのリソースを解放する」 Clear() メソッドがあります。

なんてこと?

これは HashAlgorithm を正しく処分する方法ですか?

var hasher = new MD5CryptoServiceProvider();

byte[] hashCode = hasher.ComputeHash(data);

hasher.Clear();

誰か説明してくれませんか?:)

4

3 に答える 3

12

Dipose()メソッドはプライベートですが、キャストするとアクセスIDisposableできます。他の人が言ったように、しかし、Clear()あなたのためにそれを呼び出すでしょう。

ただし、より良いアプローチは、変数の宣言と代入を using() ブロックで囲むことです。

byte[] hashCode;

using(var hasher = new MD5CryptoServiceProvider())
{
    hashCode = hasher.ComputeHash(data);
}
于 2009-04-17T18:39:21.237 に答える
5

Reflector で見ると、 のClearメソッドはHashAlgorithm単純にプライベートDisposeメソッドを呼び出しています。名前付きのメソッドを公開する理由は、Clearおそらく、クラスの設計者がハッシュ アルゴリズムにより適した名前であると考えたためです。Closeforなど、BCL の他の部分にも同様のスタイルが表示されSystem.IO.Streamます。また、ここでのベスト プラクティスは、終了時にプライベート メソッドusingを自動的に呼び出すブロックを使用することです。Dispose

于 2009-04-17T18:39:16.137 に答える
-5

GCにそれを処理させる必要があります。それが仕事です。

DB 接続やファイル ハンドルなど、一部のリソースは破棄する必要があるため、それらをusingブロック (C#) に入れます。ただし、これはそのようなケースの 1 つではありません。

于 2009-04-17T18:36:46.983 に答える