문제

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#). 그러나 이것은 그러한 경우 중 하나가 아닙니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top