sabato 24 gennaio 2026

Ottimizzazione del codice o "lana caprina" ? ,utilizzare un metodo while con una chiamata ad una proprietà nella condizione booleana è ,in alcune condizioni , sensibilmente più lento rispetto a valutare il valore una sola volta prima del ciclo ...

Segue una breve applicazione console,l'esempio è finalizzato a valutare quanto cambi il termpo di esecuzione a seconda che si usi un while così  (""pseudocodice"") :
while(counter < counted)
    rispetto ad un while così 
while(counter < al.Count)
usando lo stesso arraylist di dati,
ovvero calcoliamo una sola volta prima del ciclo quanti elementi ha la lista così : counted = al.Count; 
mentre nell'atro caso richiamiamo nella condizione del while la proprietà Count dell' ArrayList "al" ,

Seguono i valori del "test" :
risultati in millesecondi con while (counter < counted) 
1175
987
987
1092
973

nel modo seguente il numero degli elementi viene recuperato ad ogni ciclo , 
seguono i risultati in millesecondi con while (counter < al.Count) 
1686
1451
1451
1433
1421


segue il codice:

using System.Collections;

Console.WriteLine("Hello, World! , buon anno");


//riempiamo un array list con 100 milioni di stringhe 
int elements = 100000000;
int counter = 0;
ArrayList al = new ArrayList();
while (counter < elements)
{
    al.Add(counter.ToString());   
    counter++;
}

counter = 0;
int counted = al.Count;
//calcoliamo il tempo che viene utilizzato in esecuzione da parte del ciclo seguente
DateTime start = DateTime.Now;

//while (counter < counted)
while (counter < al.Count)
{
    string s = al[counter].ToString();
    counter++;
}
DateTime stop = DateTime.Now;

var difference = stop-start;
Console.WriteLine(difference.TotalMilliseconds);
Console.ReadLine();

il risultato porterebbe a dire che in un ciclo avente un numero molto alto di iterazioni e con un corpo esiguo settare il numero delle iterazioni in una variabile esterna piuttosto che calcolarlo nella condizione del ciclo stesso può comportare una variazione del tempo di esecuzione dell'intero ciclo , di circa il 40% in questo scenario ,si tratta quindi di una differenza "potenzialmente rilevante" soprattutto se si usa qualcosa di più "pesante" della "chiamata" ad una proprietà  



il codice è stato eseguito in visual studio 2026 senza debug, 
per segnalazione errori o suggerimenti potete lasciare un commento od inviare un email a gianmarco.castagna@gmail.com

Nessun commento:

Crittografia e WCF per passare una password ( od una qualsiasi altra stringa (xml,json, etc.etc.) ) da un applicazione ad un' altra in relativa sicurezza

 Il codice che segue è da considerarsi in alpha e da non utilizzare in un ambiente di produzione, è solo un "" POC "" , ...