2012-07-09 4 views
5

Esiste una differenza di prestazioni tra l'importazione di un intero spazio dei nomi e l'utilizzo dell'aliasing per importare solo una classe? Se è così, quanta differenza c'è?Prestazioni tra l'importazione di tutto lo spazio dei nomi e l'utilizzo di alias in C#?


Esempi:

Importazione di un intero spazio dei nomi:

using System.Reflection; 

Aliasing per importare una sola classe:

using BindingFlags = System.Reflection.BindingFlags; 

EDIT: Un po 'di spiegazione sul motivo per cui la vostra la risposta è il modo in cui sarebbe molto apprezzato ... in altre parole, qualcosa di più di solo una risposta sì/no per favore. E forse qualcosa sostenuto anche da una fonte autorevole?

+0

possibile duplicato di [l'opzione 'uso' fornisce vantaggi?] (Http://stackoverflow.com/questions/3911141/does-using-provide-any-advantages) – mbeckish

+2

Un alias dovrebbe causare meno clutter offerto da ImpediDense , ehm, IntelliSense. – HABO

risposta

9

Zero. Le importazioni di spazi dei nomi sono una funzione in fase di compilazione e l'IL generato sarà esattamente la stessa in entrambi i casi.

+0

Che dire di runtime quando gli assembly devono essere caricati? Non sarebbero state caricate solo le classi specificate e non tutte le classi in un intero spazio dei nomi? – bsara

+0

@Brandon Le implicazioni sulla prestazione sono nell'aggiunta del file .dll come riferimento al progetto. L'aggiunta di un'istruzione 'using' non ha alcun effetto su ciò che è o non è caricato da quelle DLL. – Servy

+0

@Brandon: questo è un aspetto completamente diverso. Le importazioni di spazio dei nomi sono semplicemente miglioramenti di tempo/leggibilità per il codice sorgente, il codice risultante è esattamente lo stesso come se avessi digitato qualcosa come System.Collections.Generic.List (ad esempio). Il caricamento dell'assieme e la risoluzione del tipo non sono direttamente correlati alle importazioni dello spazio dei nomi. – Alan

4

No, è solo un aiuto per il programmatore, il CIL generato dal compilatore è esattamente lo stesso.

+0

Nessun CIL viene generato per nessuno, vero? Cosa contiene? È una direttiva in fase di compilazione –

+0

@KierenJohnstone: Ovviamente intendevo dire che il CIL generato per l'intero programma è lo stesso. – BlackBear

3

Non c'è differenza di prestazioni. Uno dice "guarda qui quando specifichi un nome di classe, potrebbe essere qui dentro". L'altro dice "quando dico questa classe o spazio dei nomi, voglio dire usare questo".

-1

No ma ancora più ampio. Si carica la DLL che contiene il nucleo .net e contiene dozzine di spazi dei nomi. Davvero non prendi un colpo per l'importazione di spazi dei nomi finché non esci dalla dll già caricata.

Problemi correlati