2011-09-12 17 views
7

Esiste qualche differenza rispetto alle prestazioni dei metodi private, protected, public e internal in classe C#? Mi interessa se si consumano più tempo del processore o RAM.C'è qualche differenza riguardo alle prestazioni dei metodi privati, protetti, pubblici e interni nelle classi C#?

+2

microptimisation anyone? –

+0

Probabilmente no, ma c'è un miglioramento (memoria, penso) con classi sigillate. –

+0

Che dire dei metodi 'statico privato '(al contrario di non-'statico')? –

risposta

5

Io non sono consapevole di di qualsiasi differenza di prestazioni per invocazione normale; è possibile che un accesso più limitato richieda un po 'più di lavoro quando si accede tramite invocazione dinamica o riflessione, poiché potrebbe essere necessario convalidare il chiamante con maggiore attenzione. Nel normale caso compilato da JIT, l'accesso può essere convalidato dal CLR solo una volta e quindi dato per scontato. Immagino sia possibile che la compilazione JIT (e la verifica IL) stessa possa essere leggermente più lenta per un accesso più restrittivo - ma trovo difficile credere che sarebbe significativa.

Questo dovrebbe non è il essere un fattore nel determinare quale accessibilità da utilizzare, anche se in qualche modo vi è una piccola differenza di prestazioni non sono a conoscenza di. Se ritieni che potresti essere in grado di ottenere un vantaggio prestazionale rendendo l'accessibilità diversa da quella "naturale" per il tuo design, dovresti assolutamente valutare il caso prima/dopo - sospetto che ti sarà difficile trovare un situazione del mondo reale in cui la differenza è misurabile in modo affidabile.

Lo stesso tipo di consiglio vale per tutti i tipi di micro-ottimizzazione: è quasi mai una buona idea in ogni caso, e dovrebbe sicuramente essere effettuata solo all'interno di un'attenta misurazione.

+1

Sono sorpreso che tu non sia stato più inequivocabile. Detto questo, ero in procinto di elaborare "No". – harpo

+1

i metodi privati ​​potrebbero non essere ottimizzati (in linea, ad es.) In modo più aggressivo dal motore JIT? – sehe

+0

@sehe: Perché lo pensi? Anche se un metodo è pubblico, non può cambiare dopo la compilazione JIT ... –

0

Non ci sarà alcuna differenza misurabile nelle prestazioni tra metodi privati, protetti o pubblici.

Se ti concentri sull'ottimizzazione, probabilmente dovresti provare a rendere il codice del collo di bottiglia più "procedurale" rispetto all'oggetto. Farebbe un piccolo miglioramento.

Problemi correlati