У меня он работает за 0,34 секунды вместо 9+ минут
Проблема заключается в сравнении структур KeyValuePair.
Я обошел его, написав объект сравнения и передав его экземпляр в Словарь.
Из того, что я могу определить, KeyValuePair.GetHashCode () возвращает хэш-код своего Key
объекта (в данном примере наименее уникальный объект).
Поскольку словарь добавляет (и проверяет наличие) каждого элемента, он использует функции Equals и GetHashCode, но должен полагаться на функцию Equals, когда хеш-код менее уникален.
Предоставляя более уникальную функцию GetHashCode, она превосходит функцию Equals гораздо реже. Я также оптимизировал функцию Equals, чтобы сравнивать более уникальные значения до менее простых ключей.
86 000 * 11 элементов с 10 000 уникальных свойств выполняется за 0,34 секунды с использованием объекта сравнения, указанного ниже (без объекта сравнения это занимает 9 минут 22 секунды)
Надеюсь, это поможет:)
class StringPairComparer
: IEqualityComparer<KeyValuePair<string, string>>
{
public bool Equals(KeyValuePair<string, string> x, KeyValuePair<string, string> y)
{
return x.Value == y.Value && x.Key == y.Key;
}
public int GetHashCode(KeyValuePair<string, string> obj)
{
return (obj.Key + obj.Value).GetHashCode();
}
}
РЕДАКТИРОВАТЬ : Если бы это была только одна строка (вместо KeyValuePair, где string = Name + Value), это было бы примерно в два раза быстрее. Это хорошая интересная проблема, и я потратил faaaaaar слишком много времени на это (хотя я немного научился тихо)