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:
Posta un commento