문제
Md5cryptoserviceprovider와 같은 해소 로리즘에서 파생 된 객체에는 dispose () 메소드가 있지만 비공개입니다. 대신 사용 된 "모든 리소스를 출시하는"명확한 () 메소드가 있습니다.
WTF?
그렇다면 이것이 해저 로리즘을 올바르게 폐기하는 방법입니까?
var hasher = new MD5CryptoServiceProvider();
byte[] hashCode = hasher.ComputeHash(data);
hasher.Clear();
누군가 나에게 이것을 설명하고 싶습니까? :)
해결책
반사기로보고 Clear
의 방법 HashAlgorithm
단순히 개인을 부릅니다 Dispose
방법. 이름이있는 메소드를 노출시키는 이유 Clear
아마도 클래스의 디자이너들은 해시 알고리즘에 더 적합한 이름이라고 생각했을 것입니다. BCL의 다른 부분 내에서 비슷한 스타일이 표시됩니다. Close
~을 위한 System.IO.Stream
. 또한 여기서 모범 사례는 사용하는 것입니다 using
블록은 자동으로 개인을 호출합니다 Dispose
방법이 완료되었을 때.
다른 팁
동안 Dipose()
메소드는 비공개입니다 IDisposable
당신은 그것에 액세스 할 수 있습니다. 그러나 다른 사람들이 말했듯이 Clear()
당신을 위해 그것을 부를 것입니다.
그러나 더 나은 접근 방식은 사용 () 블록에서 변수의 선언 및 할당을 동봉하는 것입니다.
byte[] hashCode;
using(var hasher = new MD5CryptoServiceProvider())
{
hashCode = hasher.ComputeHash(data);
}
당신은 GC가 당신을 위해 그것을 처리하도록해야합니다. 그게 직업입니다.
DB 연결 및 파일 핸들과 같은 일부 리소스를 폐기해야하므로 그 자원을 using
블록 (C#). 그러나 이것은 그러한 경우 중 하나가 아닙니다.
제휴하지 않습니다 StackOverflow