Un costruttore statico viene eseguito la prima volta che si accede a un membro statico. Sapendo questo, ho diverse domande:Un costruttore statico può ridurre le prestazioni di accesso ai metodi statici?
- Ciò significa che ogni volta che accedo a un metodo statico, il runtime deve verificare se è stato chiamato il costruttore statico?
- Questo comporta un calo di prestazioni?
- Le classi statiche "senza istruttore" evitano questo impatto sulle prestazioni?
[EDIT]: Vorrei chiarire che io non sono preoccupato con micro-ottimizzazione.
Sto facendo questa domanda perché è una decisione design. Se un costruttore statico subisce un calo di prestazioni, quindi progetterò il mio codice con questo in mente e sarà più consapevole delle decisioni che potrebbero influire sulle prestazioni.
Ecco un esempio per illustrare la mia domanda. Ci sarebbe qualche vantaggio nel prendere il metodo Independent
e metterlo in una classe statica separata? In questo modo, non avrebbe dovuto verificare se lo statico Test
fosse stato inizializzato. [Aggiornamento Vedere la mia risposta qui sotto per un esempio migliore, più semplice].
static class Test {
// Static constructor with dependent method:
static int x;
static Test() { x = 5; }
static int Dependent() { return x; }
// Static, independent method:
static int Independent(int y) { return y+1; }
}
Here's the quote dalle specifiche C# per il costruttore statico:
L'esecuzione di un costruttore statico viene attivato dal primo dei seguenti eventi che si verificano all'interno di un dominio di applicazione:
- Un'istanza della classe viene creata.
- Viene fatto riferimento a qualsiasi membro statico della classe.
Possibile duplicato: http://stackoverflow.com/questions/2921828/static-constructors-cause-a-performance-over-head –
Ho letto quel post, ma sicuramente differisce dalla mia domanda. Confronta le prestazioni di ** inizializzazione del tipo ** rispetto a ** costruttore statico **. Sono interessato a sapere se l'accesso a un metodo è rallentato da un costruttore statico. Ho riletto il "duplicato", comprese tutte le risposte e i link, e ancora non ho una risposta alla mia domanda! –
Penso che sia sull'accesso al campo e non sulla chiamata al metodo. Ma sì, ci può essere una notevole riduzione delle prestazioni in alcuni scenari. – CodesInChaos