Учитывая, что у меня есть неизменяемый класс, для которого была написана функция GetHashCode()
, как я узнаю, будет ли полезно кэшировать результат хеширования, или в большинстве случаев даже целесообразно это сделать?
Учитывая, что производительность вычисления GetHashCode()
была оптимизирована для примитивов и строковых значений, стоит ли задуматься над этим?
Типичный GetHashCode()
мой может выглядеть следующим образом:
//C#
public override int GetHashCode() {
int hash = 13;
hash = 13 * hash + IntValue;
hash = 13 * hash + (StringValue1 == null ? 0 : StringValue1.GetHashCode());
hash = 13 * hash + (StringValue2 == null ? 0 : StringValue2.GetHashCode());
return hash;
}
Мои мысли по поводу ситуаций, в которых это может быть целесообразно, следующие:
- Если это ключ к карте или словарю.
- Если у упомянутой карты будет много поисков за время ее существования.