메모리 캐시 된 데이터 구조를 인턴 된 문자열 집합과 연관시키고 인계 된 문자열 인스턴스를 사용하여 연관된 데이터 구조를 조회하려고합니다.인턴 된 문자열에 의해 키가되는 사전의 키
사전 정의 된 문자열 세트는 약 1000 개입니다. 캐시 인구 비용은 무시할 수 있지만 고성능 조회를 원합니다.
public class InternedExtras
{
public DateTime Prop1 {get; set; }
public Decimal Prop2 {get; set; }
}
이상적으로 나는 인턴 된 문자열의 참조에 대해 키를 만듭니다. 닷넷은 개체 참조를 특정 형식으로 노출하지 않습니다.
나는 나의 사전을 선언하는 경우 :
Dictionary<string, InternedExtras>
그때 나는 선택 System.String 평등 재정의 비효율적이 될 것입니다 사전 검색 중에 문자 문자열 값을 비교하여 문자를 호출합니다 걱정됩니다.
내가 완전히 이해 적이 없다 그러나Dictionary<int, InternedExtras> _extrasDictionary
InternedExtras GetInternedExtras(string knownToBeInterned)
{
return _extrasDictionary[ knownToBeInterned.GetHashCode() ];
}
해시 코드 수학 및 고유성이 보장되지 이해 :
옵션이 될 것입니다.
내 인턴 된 문자열의 평균 길이는 50 자이며 최신 .Net 버전으로 배포 할 수 있습니다.
Dictionary<string, InternedExtras> _extrasDictionary;
은 다음과 실제로 매우 효율적으로 찾고 수행 :
- 감사합니다 사전/해시 코드의 성능에 대한 확신에 대한합니다. System.String이 someString.GetHashCode 호출 사이에 문자열의 해시 코드를 저장하지 않는다고 생각하는 것이 맞습니까? – camelCase
실제로 생각하지 않습니다 (아래 소스 코드 참조). '사전'은 사실상 빠른 메모리 검색을 수행하는 방법이며 BCL (즉 Microsoft에서 구현)의 일부분이라는 것을 알고 있습니다. 의심이 간다면 몇 가지 성능 테스트를 실행해야합니다. https://referencesource.microsoft.com/#mscorlib/system/string.cs –
dana