Probabilmente alcuni di voi già ne sono a conoscenza, ma la lettura di questo articolo ha suscitato in me parecchie curiosità che mi hanno portato a replicare il test eseguito dall'autore sulla mia macchina. Così l'altro giorno ho creato ed eseguito due applicazioni console, stesso codice ma su diverse versioni, e devo dire di essere rimasto a bocca aperta:

Codice C#

DataTable dt = new DataTable();

DataColumn id = dt.Columns.Add("ID", System.Type.GetType("System.Int32"));
id.Unique = 
true;
dt.Columns.Add("test", System.Type.GetType("System.String"));

DateTime dtStart = DateTime.Now;
Random rnd = 
new Random(1);

Console.WriteLine("Start at {0}", dtStart.ToString());

for(int i=0;i<1000000;i++)
{
    DataRow dr = dt.NewRow();
    dr["ID"] = rnd.Next();
    dr["test"] = DateTime.Now.ToString();
    
try
    
{
        dt.Rows.Add(dr);
    }
    
catch(System.Data.ConstraintException ce)
    {
        dr["ID"] = rnd.Next();
        dt.Rows.Add(dr);
    }
    Console.WriteLine("Row {0} added", i);
}

Console.WriteLine("End at {0} in {1}", dtStart.ToString(), DateTime.Now.Subtract(dtStart));

.NET Framework 1.1

.NET Framework 2.0

Salta immediatamente all'occhio il tempo di esecuzione: il fw 1.1 impiega 31 minuti mentre il 2.0 quasi 2 minuti!!! Questo perchè è stata completamente riscritta la gestione degli indici del DataTable/DataSet, come ben evidenziato nell'articolo, per renderla maggiormente scalabile. Il fw 1.1 evidenzia un notevole peggioramento delle prestazione con l'aumento delle dimensioni del DataTable, rendendolo, di fatto, poco scalabile.

Che dire...mi sembra davvero un ottimo lavoro!

 

P.S.: Non ho eseguito alcun test sul DataAdapter.Fill(DataSet) ma prometto di farlo al più presto, la curiosità ha nuovamente preso il sopravvento su di me !

 

powered by IMHO 1.2