Работа с большой коллекцией

152
11 февраля 2019, 01:00

В общем есть вот такой класс:

 class Metric
    {
        public Word Word1;
        public Word Word2;
        public Metric(Word word1, Word word2)
        {
            Word1 = word1;
            Word2 = word2;
        }
        public int Simil;
        public override int GetHashCode()
        {
            return Word1.GetHashCode() + Word2.GetHashCode();
        }
    }
public class Word
{
    public string Text;
    public Word(string text)
    {
        Text = text;
    }
    public override int GetHashCode()
    {
        return Text.GetHashCode();
    }
}

Класс содержит в себе данные о похожести 2-ух слов.

Есть класс, который содержит в себе поле с типом HashSet.

Так вот, когда коллекция достигает размера в несколько миллионов, то становится заметно, что процесс не так шустро, как в самом начале добавления.

Можно ли как-нибудь избежать этого? По идее, LinkedList будет шустрым, но тогда я лишаюсь проверки на уникальность проверяемых пар слов, а это я использую, что бы не пересчитывать одно и тоже повторно.

Answer 1

Кэшируйте результат GetHashCode:

class Metric
{
    private int fHashCode;
    public Word Word1 { get; private set; }
    public Word Word2 { get; private set; }
    public Metric(Word word1, Word word2)
    {
        Word1 = word1;
        Word2 = word2;
       fHashCode = Word1.GetHashCode() + Word2.GetHashCode();
    }
    public int Simil;
    public override int GetHashCode()
    {
        return fHashCode;
    }
}
READ ALSO
Массив из GameObject-ов

Массив из GameObject-ов

Как изменить Scale всех объектов в массивеЯ сделал так: public GameObject[] scaler;

184
Обновление данных в таблице используя DataTable C# Postgres

Обновление данных в таблице используя DataTable C# Postgres

Нужно выполнить обновление записей в таблице в субд Postgres,

173
Обработчики событий для событий внутри Dictionary

Обработчики событий для событий внутри Dictionary

Есть два словаряВ них прописаны темплейты для CustomControl

155
Как сослаться на уже открытую книгу EXCEL при работе c ClosedXML

Как сослаться на уже открытую книгу EXCEL при работе c ClosedXML

Разрабатываю надстройку VSTO для EXCELПредполагаю работать с библиотекой ClosedXML

153