>Ciao ho affrontato il tuo problema un pò di tempo fa e non sono
>riuscito a scendere sotto i 5 secondi in quanto un db che contiene
>tutti i comuni d'italia sta sui 9000 record e riempire una combobox
>di 9000 elementi 5 secondi sono anche pochi
Ragazzi in questi caso pronuncio sempre un'aneddoto molto divertente che dovrebbe far pensare :
"Con un processore avente potenza equivalente agli attuali processori di un quasiasi telefono non smartphone dei giorni nostri, gli americani nel '69 hanno mandato l'uomo sulla Luna"
Come dicevo prima, c'è un collo di bottiglia non indifferente : ho appena simulato un dataset di 10000 record (effettuati con un ciclo e non con un query) e la visualizzazione dei dati nella combobox si ha in meno di un decimo di secondo (processore i7 920).
Quindi, se si effettua una query mirata al solo campo "comune" e si utilizza la property DataSource il tutto fila per il meglio salvo bottlenek sparsi....
La "Ricerca Incrementale" è di facile implementazione : puoi precaricarti il dataset per intero, trasformarlo in una Lista generica e tramite il metodo "Where" effettuare il filtro oppure puoi lanciare una query ogni qual volta viene richiamato l'evento TextChanged della TextBox.
Comunque sia prova a fare questo Test in un nuovo progetto :
private void button1_Click(object sender, EventArgs e)
{
DateTime Test_Inizio = DateTime.Now;
DataSet d = new DataSet();
d.Tables.Add("Prova");
d.Tables[0].Columns.Add("Comuni", typeof(string));
for (int i = 0; i < 10000; i++)
d.Tables[0].Rows.Add("Prova" + i.ToString());
List<string> ComuniList = CreaListaComuni(d.Tables[0]);
comboBox1.DataSource = ComuniList;
comboBox1.DisplayMember = "Value";
MessageBox.Show((Test_Inizio - DateTime.Now).ToString());
}
private List<String> CreaListaComuni(DataTable dtData)
{
List<string> str = new List<string>();
foreach (DataRow row in dtData.Rows)
{
foreach (DataColumn Col in dtData.Columns)
{
str.Add(row[Col].ToString());
}
}
return str;
}
P.S Cosa importantissima: se stai effettuando i test da Visual Studio ed hai attiva la modalità Debug, sbagli! Compila la soluzione in modalità release ed apri l'exe generato.
------------------------------------------
Ignazio Catanzaro
http://blogs.dotnethell.it/swdev/