Я хочу связать структуру данных, кэшированную в памяти, с набором интернированных строк и использовать переданный экземпляр интернированной строки для поиска связанной с ней структуры данных.
Предопределенный набор строк будет около 1000. Затраты на заполнение кеша можно игнорировать, но мне нужен высокопроизводительный поиск.
public class InternedExtras
{
public DateTime Prop1 {get; set; }
public Decimal Prop2 {get; set; }
}
В идеале я бы создал словарь со ссылкой на интернированную строку, но .Net не предоставляет ссылки на объекты как определенный тип.
Если я объявлю свой словарь как:
Dictionary<string, InternedExtras>
тогда я обеспокоен тем, что переопределение равенства System.String вызовет сравнение значений строки char во время поиска в словаре, что будет неэффективно.
Вариант будет:
Dictionary<int, InternedExtras> _extrasDictionary
InternedExtras GetInternedExtras( string knownToBeInterned )
{
return _extrasDictionary[ knownToBeInterned.GetHashCode() ];
}
Однако я никогда полностью не понимал математику хэш-кода и понимаю, что уникальность не гарантируется.
Средняя длина моих интернированных строк составляет 50 символов, и я могу использовать последнюю версию .Net.