Jestem w trakcie opracowywania niestandardowej struktury danych o stałej wartości klucza, aby porównać ją z SqlLite i Berkley DB. W każdym razie zanim napisałem implementację, chciałem znaleźć najlepszą strukturę danych do wykorzystania w tym celu. Spojrzałem na parę:.net słownik vs inne zarządzane niestandardowe struktury danych, dlaczego słownik .net jest tak szybki?
- Drzewo redblack typu open source.
- Implementacja słownika mono.
Chciałem, aby wybrane struktury danych miały numery wydajności porównywalne ze słownikiem .net.
Kiedyś prosty test dla pętli z 500k iteracji dla wkładek i używane stoper do mierzenia wkładek i kluczy zapoznać się:
Zauważyłem, że
- Berkley DB klucz czas odnośnika był mniej więcej taki sam jako słownik.
- Próbowałem testu pętli for C5 dla słownika, implementacji drzewa redblack, a nawet implementacji słownika mono.
Czas wstawiania: 7% wolniejszy niż słownik .net.
Czas wyszukiwania: 1000% wolniejszy niż słownik .net. To jest nawet wolniejsze niż szybkość wyszukiwania z sqllite !! Próbowałem wykonać test z włączoną optymalizacją kompilatora i nadal otrzymałem podobne wyniki.
Zdaję sobie sprawę, że porównuję Hashtables z drzewami itp., Ale wpadłem w zakłopotanie co do rozbieżności w wydajności między wszystkimi strukturami danych.
Ktoś ma jakieś pomysły
Nie myślałem o implikacjach JIT dobry punkt –
To było to, to był JIT! Coś, o czym nie myślałem. Wykonałem test kilku iteracji, a wydajność słownika mono była w przybliżeniu taka sama jak w słowniku .net zgodnie z oczekiwaniami. Dzięki. –