由实习字符串

时间:2017-03-09 20:18:00

标签: c# string dictionary gethashcode

我希望将内存缓存数据结构与一组内部字符串相关联,并使用实例化字符串的传递实例来查找其关联的数据结构。

预定义的字符串集合的数量大约为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版本。

1 个答案:

答案 0 :(得分:1)

我实际上认为这是您最有效的选择:

Dictionary<string, InternedExtras> _extrasDictionary;

如果看起来非常有效!

InternedExtras extras = _extrasDictionary[interned];

您引用的char by char比较只会在一小部分字符串上调用。这是因为interned.GetHashCode()将用于将键分组到&#34; buckets&#34;。

这个问题有更多关于这个问题的细节:

How does a hash table work?