[C#]Wydajne przeszukiwanie kolekcji obiektów


(Masters87) #1

Witam,

program posiada kolekcję obiektów, która ma stałą zawartość (kilka set tysięcy obiektów).

Druga kolekcja zawiera dane wprowadzone z dużą częstotliwością.

Ta druga kolekcja posiada zdarzenie CollectionChanged, w którym jest sprawdzane czy nowo dodany obiekt istnieje w pierwszej kolekcji (jeśli tak to jest w stosowany sposób odznaczany).

W jaki sposób zrobić takie przeszukiwanie wydajnie, w przypadku gdy częstotliwość wprowadzania nowych danych jest bardzo duża? BackroundWorker?

Proszę o sugestie.


(Tomek Matz) #2

Najlepiej jakbyś wprowadził do aplikacji dodatkową kolekcję, a dokładnie tą http://msdn.microsoft.com/en-us/library/bb359438.aspx (HashSet). Pozwala ona w czasie O(1) sprawdzić, czy dany obiekt został już do niej dodany. W kolekcji tej mógłbyś przechowywać np. identyfikatory - unikalne dla poszczególnych obiektów (typ long, int itp.) lub referencje do tych swoich obiektów (typ Twoja jakaś tam klasa). Jeśli w kolekcji trzymałbyś referencje, to musisz pamiętać o tym, aby w klasie zaimplementować metody GetHashCode i Equals.