Ottimizzazione del compilatore C #: metodi non utilizzati

Il compilatore C # (in VS2008 o VS2010) rimuove i metodi non utilizzati durante la compilazione?

Presumo che possa avere un problema nel decidere se i metodi pubblici saranno mai usati, quindi immagino che compili tutti i metodi pubblici.

Ma che dire dei metodi privati ​​che non vengono mai usati all’interno di una class?

MODIFICARE:

Esiste un insieme di regole sull’ottimizzazione del compilatore che sono documentate ovunque?

Appena registrato nel riflettore con una versione di rilascio. Il compilatore non rimuove i metodi privati ​​non utilizzati.

Ci sono modi per usare un metodo senza la conoscenza del compilatore, come con la riflessione. Quindi il compilatore non tenta di indovinare. Lascia solo i metodi lì.

Gli unici metodi privati ​​rimossi dal compilatore sono metodi parziali senza implementazione.

Per le ottimizzazioni del compilatore C #, guarda qui .

Il compilatore non rimuove alcun metodo dall’assembly, pubblico o privato. In effetti, potrei causare strani problemi di riflessione e impedire le chiamate di runtime a tali metodi.

Esistono molti framework (come il parser XAML) che consentono di chiamare metodi privati ​​senza binding statici (si pensi a OnClick = “myFunction” in un file XAML) Questo markup chiamerà myFunction potenzialmente privato quando viene generato l’evento OnClick. .. Ma il compilatore non ha informazioni su tale comportamento in fase di compilazione.

Il codice dinamico soffre dello stesso problema, anche la generazione di IL. Ed è ansible accedere a metodi privati ​​da qualsiasi object durante l’esecuzione in piena fiducia.

No, non saranno rimossi. Potrebbe darti un avvertimento, ma non lo farà da solo.

Questa ottimizzazione è efficacemente implementata a livello di JIT, il che è positivo perché funziona per metodi sia pubblici che privati ​​/ qualsiasi. Se un metodo non viene mai chiamato (ignorando ngen, ecc.), Non ottiene mai JIT. Ora si potrebbe dire che questo è ancora uno spreco di spazio per i metadati, ecc. Ma come altri hanno sottolineato, il privato non è così privato.