我希望将内存缓存数据结构与一组内部字符串相关联,并使用实例化字符串的传递实例来查找其关联的数据结构。
预定义的字符串集合的数量大约为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版本。
答案 0 :(得分:1)
我实际上认为这是您最有效的选择:
Dictionary<string, InternedExtras> _extrasDictionary;
如果看起来非常有效!
InternedExtras extras = _extrasDictionary[interned];
您引用的char by char比较只会在一小部分字符串上调用。这是因为interned.GetHashCode()
将用于将键分组到&#34; buckets&#34;。
这个问题有更多关于这个问题的细节: