Ho letto da qualche parte che avere proprietà pubbliche è preferibile avere membri pubblici in una classe.Sovraccarico delle prestazioni per le proprietà in .NET
È solo a causa di abstaraction e modularità? Ci sono altri motivi per evitare
Gli accessi di proprietà sono configurati in chiamate di funzione dal compilatore. Per le proprietà senza un archivio di backup (ad esempio
public string UserName { get; set; }
), quale sarebbe l'overhead delle prestazioni rispetto a un accesso diretto ai membri? (Lo so che non dovrebbe in genere fare la differenza, ma in alcuni del mio codice, le proprietà sono accessibili milioni di volte.)
Edit1: Ho eseguito un codice di prova sui membri interi e proprietà ei membri pubblici erano circa 3-4 volte più veloci delle proprietà. (~ 57 ms vs ~ 206 ms in Debug e 57 vs 97 in Release era il valore di esecuzione più comune). Per 10 milioni di letture e scritture, entrambi sono abbastanza piccoli da non giustificare il cambiamento di qualcosa.
Codice:
class TestTime1
{
public TestTime1() { }
public int id=0;
}
class TestTime2
{
public TestTime2() { }
[DefaultValue(0)]
public int ID { get; set; }
}
class Program
{
static void Main(string[] args)
{
try
{
TestTime1 time1 = new TestTime1();
TestTime2 time2 = new TestTime2();
Stopwatch watch1 = new Stopwatch();
Stopwatch watch2 = new Stopwatch();
watch2.Start();
for (int i = 0; i < 10000000; i++)
{
time2.ID = i;
i = time2.ID;
}
watch2.Stop();
watch1.Start();
for (int i = 0; i < 10000000; i++)
{
time1.id = i;
i = time1.id;
}
watch1.Stop();
Console.WriteLine("Time for 1 and 2 : {0},{1}",watch1.ElapsedMilliseconds,watch2.ElapsedMilliseconds);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.In.ReadLine();
}
}
Serializzazione e DataBinding sono la ragione per cui posso pensare a – LiFo
La differenza di fattore per la build di debug non ottimizzata è irrilevante. Non stai spedendo il build di debug ai clienti. Inoltre, noto che nel tuo test stai misurando * ora jit della proprietà * e * tempo di accesso *. Se sei interessato al costo * ammortizzato * di una proprietà jitted compreso il tempo di avvio del jitter, questa è una cosa. Ma se ciò che ti interessa è il costo * per utilizzo *, allora * non configura il costo jit con il costo per utilizzo * come fai qui. E indipendentemente dal fatto che la tua tecnica di misurazione sia buona: ottimizza * la cosa più lenta *. Dubito che sia così. –
possibile duplicato di [Perché i campi pubblici sono più veloci delle proprietà?] (Http://stackoverflow.com/questions/632831/why-are-public-fields-faster-than-properties) – nawfal