Sono nel mezzo dello sviluppo di una struttura di dati del tipo di valore chiave persistente personalizzato, da confrontare con SqlLite e Berkley DB. Comunque prima di scrivere l'implementazione volevo trovare la migliore struttura dati da usare per questo scopo. Ho guardato il un paio:.net dictionary vs altre strutture dati personalizzate gestite, perché il dizionario .net è così veloce?
- Un albero dei sorgenti redblack aperta.
- Mono implementazione del dizionario.
Volevo che le strutture che ho scelto presentassero numeri di prestazioni paragonabili al dizionario .net.
ho usato un semplice test per il ciclo con 500k iterazioni per gli inserti e usato il cronometro per misurare inserti e aspetto chiave di fino:
ho notato che
- Berkley DB tempo di ricerca chiave era circa la stessa come il dizionario.
- Ho provato il mio test del ciclo per C5 per il dizionario, un'implementazione dell'albero rosso e persino l'implementazione del dizionario mono.
Tempo di inserimento: 7% più lento del dizionario .net.
Tempo di ricerca: 1000% più lento del dizionario .net. Questo è ancora più lento della velocità di ricerca con sqllite !! Ho provato a eseguire il test con l'ottimizzazione del compilatore attivata e ho comunque ottenuto risultati simili.
Mi rendo conto che sto confrontando Hashtables vs alberi ecc., Ma mi sono soffermato sulla discrepanza delle prestazioni tra tutte le strutture dati.
Qualcuno ha qualche idea
Non ho pensato alle implicazioni del JIT buon punto –
E 'stato così, era il JIT! Qualcosa a cui non ho pensato. Ho eseguito il test diverse iterazioni e le prestazioni del dizionario mono erano quasi le stesse del dizionario .net come previsto. Grazie. –