2012-07-09 7 views
5

Czy istnieje różnica w wydajności między importowaniem całego obszaru nazw a używaniem aliasingu do importowania tylko jednej klasy? Jeśli tak, jaka jest różnica?Wydajność między zaimportowaniem całego obszaru nazw a użyciem aliasu w języku C#?


Przykłady:

Importowanie całą przestrzeń nazw:

using System.Reflection; 

Aliasing importować tylko jedną klasę:

using BindingFlags = System.Reflection.BindingFlags; 

EDIT: Trochę wyjaśnienie, dlaczego twój odpowiedzią jest sposób, w jaki byłoby to bardzo cenne ... innymi słowy, coś więcej niż wystarczy odpowiedź "tak/nie". A może coś popartego jakimś autorytatywnym źródłem?

+0

możliwy duplikat [nie "przy użyciu" zapewnienia jakichkolwiek korzyści?] (Http://stackoverflow.com/questions/3911141/does-using-provide-any- wady) – mbeckish

+2

Alias ​​powinien powodować mniej zakłóceń oferowanych przez ImpediDense , er, IntelliSense. – HABO

Odpowiedz

9

Zero. Import Namespace jest funkcją kompilacji, a wygenerowany IL będzie dokładnie taki sam.

+0

Co w czasie wykonywania, gdy zespoły mają zostać załadowane? Czy załadowano by nie tylko określone klasy, a nie wszystkie klasy w całym obszarze nazw? – bsara

+0

@Bandon Implikacje wydajności polegają na dodaniu pliku .dll jako odniesienia do projektu. Dodanie instrukcji "using" nie ma wpływu na to, co jest załadowane z tych bibliotek dll. – Servy

+0

@Bandon: Jest to zupełnie inny aspekt. Importowanie obszarów nazw to po prostu oszczędność czasu/ulepszenia czytelności dla kodu źródłowego, wynikowy kod jest dokładnie taki sam, jak gdybyś wypisał takie rzeczy jak System.Collections.Generic.List (na przykład). Ładowanie złożenia i rozwiązywanie typów nie są bezpośrednio związane z importowaniem przestrzeni nazw. – Alan

4

Nie jest to po prostu pomoc dla programisty, CIL wygenerowany przez kompilator jest dokładnie taki sam.

+0

Dla żadnego nie jest generowany CIL, czyż nie? Co by zawierał? To jest dyrektywa dotycząca kompilacji –

+0

@KierenJohnstone: Oczywiście chciałem powiedzieć, że CIL wygenerowany dla całego programu jest taki sam. – BlackBear

3

Nie ma różnicy w wydajności. Jeden mówi: "spójrz tutaj, kiedy określę nazwę klasy, może być tutaj". Drugi mówi: "kiedy mówię tę klasę lub przestrzeń nazw, mam na myśli użycie tego".

-1

Nie, ale jeszcze szerszy. Załadujesz bibliotekę dll zawierającą rdzeń .net, który będzie zawierał dziesiątki obszarów nazw. Naprawdę nie bierzesz hitu do importowania przestrzeni nazw, dopóki nie wyjdziesz poza już załadowaną bibliotekę dll.

Powiązane problemy