2015-02-11 17 views
7

Il compilatore C# potrebbe ottimizzare i metodi vuoti vuoti? Qualcosa comeIl compilatore rifiuta i metodi vuoti?

private void DoNothing() 
{ 
} 

come essenzialmente, nessun codice viene eseguito a parte l'aggiunta DoNothing alla stack di chiamate e la rimozione di nuovo, non sarebbe meglio per ottimizzare questa chiamata via?

risposta

18

Il compilatore C# potrebbe ottimizzare i metodi vuoti vuoti?

No. Si può ancora accedere tramite riflessione, quindi è importante che il metodo stesso rimanga.

È probabile che qualsiasi sito di chiamata includa anche la chiamata, ma lo JIT potrebbe ottimizzarli. È in una posizione molto migliore per farlo. È fondamentalmente un caso speciale di inlining, in cui il codice inline è vuoto.

Si noti che se si chiama su un altro oggetto:

foo.DoNothing(); 

che è non un no-op, perché sarà verificare che foo non è nullo.

+0

Ah, non ho pensato a null chiamando un metodo e quindi fallendo –

3

Mai. Il compilatore non ha a che fare con ciò che è vuoto o non scritto. È proprio quello che scrivi, ottieni il tuo MSIL. è possibile controllare qui in ILDASM

enter image description here

3

Se si vuole si può intercettare il post evento di build per ogni progetto ed eseguire uno strumento di controllo di IL che rifletterà la DLL generata, ispezionare ogni MethodInfo nel vostro tipo e chiedete che sia IL a cercare modelli IL vuoti come solo le istruzioni NoOp IL, e rimuovere i metodi indesiderati.

Ad esempio: var ilBytes = SomeMethodInfo.GetMethodBody(). GetILAsByteArray();

Un buon strumento di offuscamento "potenzierà" i metodi in questo modo. preemptive.com/products/dotfuscator/features#pruning - weston 5 min fa

È possibile utilizzare lo strumento esterno di Visual Studio di trovare metodi vuoti e rimuoverli dal file sono definiti o utilizzati in

.
+1

Un buon strumento di offuscamento "potenzierà" i metodi in questo modo. http://www.preemptive.com/products/dotfuscator/features#pruning – weston

+0

Hai affermato un buon punto, grazie per il commento :) –

Problemi correlati