Ho un DataTable/raccolta che è memorizzato nella cache, voglio usarlo come sorgente per generare risultati per una casella di testo completa automatica (usando AJAX ovviamente). Sto valutando varie opzioni per recuperare rapidamente i dati. Il numero di elementi nella raccolta/righe nel datatable può variare da 10000 a 2.000.000. (In modo da non essere deviato, per il momento supponiamo che la decisione sia stata presa, ho molta RAM e userò la cache e non la query del database per questo)DataTable.Select vs DataTable.rows.Find vs foreach vs Trova (Predicato <T>)/Lambda
Ho qualche logica di business aggiuntiva per questa elaborazione ; Devo dare la priorità alla lista di completamento automatico come da una colonna priority
(int) nella raccolta. Quindi se qualcuno cerca Micro
e dico 20 risultati di parole/frasi che iniziano con Micro
, sceglierei i primi 10 articoli risultanti con la massima priorità. (da qui la necessità di avere una proprietà di priorità associata al valore di stringa).
Gli elementi della raccolta sono già ordinati in ordine alfabetico.
Quale sarebbe la soluzione migliore in questo caso.
1. Utilizzando DataTable.Select (.
2. Using DataTable.Rows.Find(.
3. Utilizzare una raccolta personalizzata con foreach or for per scorrere attraverso i suoi valori.
4. Utilizzare un insieme generico con anonymous delegates o lambda (since both give same performance o not?)
Beh, basta controllare se qualcuno è già stato lì! –
Se lo fai un benchmark, faccelo sapere! Sono curioso di cosa troverai. –