sto usando CultureInfo.CurrentCulture
quando formattazione mie corde usando string.format
prestazioni considerazione quando si utilizzano le proprietà più volte
Per citare this blog
Questo ha solo l'implicazione che se si utilizza CurrentCulture molto, è potrebbe valer la pena leggerlo in una variabile privata invece di fare molte chiamate a CultureInfo.CurrentCulture, altrimenti stai usando cicli di clock su inutilmente.
così come da questo autore
var culture = CultureInfo.CurrentCulture
string.Format(culture,"{0} some format string","some args");
string.Format(culture,"{0} some format string","some other args");
è meglio di
string.Format(CultureInfo.CurrentCulture,"{0} some format string","some args");
string.Format(CultureInfo.CurrentCulture,"{0} some format string","some other args");
come da MSDN, CultureInfo.CurrentCulture is a property
C'è una penalizzazione delle prestazioni associato quando si accede a una proprietà più volte? ?
Inoltre ho eseguito alcune analisi emperiche e i miei test mi mostrano che l'utilizzo di una variabile locale è più costoso rispetto all'utilizzo diretto della proprietà.
Stopwatch watch = new Stopwatch();
int count = 100000000;
watch.Start();
for(int i=0;i<count;i++)
{
string.Format(CultureInfo.CurrentCulture, "{0} is my name", "ram");
}
watch.Stop();
//EDIT:Reset watch
watch.Reset();
Console.WriteLine(watch.Elapsed);
Console.WriteLine(watch.ElapsedMilliseconds);
Console.WriteLine(watch.ElapsedTicks);
Console.WriteLine("--------------------");
var culture = CultureInfo.CurrentCulture;
watch.Start();
for (int i=0; i < count; i++)
{
string.Format(culture, "{0} is my name", "ram");
}
watch.Stop();
Console.WriteLine(watch.Elapsed);
Console.WriteLine(watch.ElapsedMilliseconds);
Console.WriteLine(watch.ElapsedTicks);
Risultato:
00:00:29.6116306
29611
68922550970
--------------------
00:00:27.3578116
27357
63676674390
miei test dimostrano che l'uso di CultureInfo.CurrentCulture
proprietà è meglio che usare variabile locale (che contraddice con vista degli autori). O mi sto perdendo qualcosa qui?
Modifica: non ho reimpostato il cronometro prima della seconda iterazione. quindi la differenza. azzeramento del cronometro, aggiornamento del conteggio delle iterazioni e risultato in questa modifica
Nel codice di prova non si reimposta il cronometro. L'utilizzo del riferimento memorizzato nella cache è in realtà più veloce. – Steven
CultureInfo.CurrentCulture non è economico, ma string.Format è molto più costoso. – Steven
Steven, hai dannatamente ragione, non stavo azzerando il cronometro. Perché non lo postare come risposta e aggiornerò il mio post + segnalo come risposta. Per quelli che sono curiosi, sì, usare la variabile locale è più veloce. Una differenza di circa 2.473 secondi per 100 milioni di iterazioni !!! – ram