IEqualityComparer<T>
에서 파생 된 클래스를 작성했습니다.이 클래스는 필자가 필요로하는 LINQ 쿼리에 유용합니다.직접 비교를 위해 IEqualityComparer <T>의 GetHashCode() 부분을 사용합니까?
내가 알고 있듯이, GetHashCode()
(빠름)이 먼저 호출 된 다음 해시 코드가 동일하면 Equals()
(약간 더 느림)이 먼저 호출됩니다.
그러나 수동으로, 나는 빠른 GetHashCode()
평등 검사를 거치지
return new MyIEqualityComparer().Equals(objA,objB);
같은 것을 사용하고, 직접적인 비교를 위해 그것을 사용하는 경우. objA
을 objB
과 비교하여 더 빠른 GetHashCode()
검사를 자동으로 건너 뛰지 않는 방법이 있습니까?
나는 objA.Equals()
이 IEqualityComparer<T>
에서 파생 된 인수를 허용하는 오버로드를 가지기를 바랐다 고 생각합니다.
해결하려는 성능 문제가 있습니까, 아니면 그냥 '최적화'입니까? – stuartd
GetHashCode는 평등성을 증명하지 않으므로 항목이 해시 테이블 (사전 또는 HashSet)에 속한 버킷을 찾을 수 있으므로 전체 컬렉션 대신 훨씬 적은 수의 항목에 대해 실제 평등 확인을 수행 할 수 있습니다. –
주된 목적은 객체를 해시 테이블에 넣는 것입니다. 사용자가 그것이 더 빠르 든 빠르든지에 대해 어떠한 보증도 할 수 없다고 생각합니다. –