2010-11-12 11 views
22

Mogę już znać odpowiedź na to pytanie, ale pomyślałem, że warto o to zapytać. Jeśli mam ładunek z using w moim pliku kodu, że nie są używane;Niewykorzystane za pomocą wyciągów

  1. Czy ma to jakikolwiek szkodliwy wpływ na wydajność?
  2. W jaki sposób kompilator radzi sobie z nimi podczas kompilacji/uruchamiania?

Dzięki

+4

Mówisz o użyciu ** dyrektyw ** lub używania ** instrukcji **? – icecrime

+0

Masz na myśli wydajność runtime lub wydajność kompilatora? Kompilator nie radzi sobie z nimi w czasie wykonywania, z definicji. – Simone

+0

Duplikat http://stackoverflow.com/questions/136278/why-should-you-remove-unnecessary-c-using-directives? – JLWarlow

Odpowiedz

19

to ma jakikolwiek szkodliwy wpływ na wydajność?

nr

Jak radzi sobie z nimi kompilator podczas kompilacji/run czasie?

Podczas kompilacji robią to, czego oczekują, tj. Działają jako import przestrzeni nazw. Nie występują w skompilowanym pliku binarnym: każde odwołanie do typu używa w pełni kwalifikowanej nazwy.

Kompilator sprawdza przestrzeń nazw w oświadczeniu using, nawet jeśli nie jest potrzebna; jeśli usuniesz obszar nazw, wszystkie instrukcje, które się do niego odnoszą, zawiedzie.

Dla mnie zbędne oświadczenia using są jak nadmiarowe komentarze. Nie mają one różnicy w stosunku do kompilatora, ale zawierają zbyt wiele z nich i ryzykujesz dezorientację programistów.

+0

Dzięki ... jak się spodziewałem. –

1

W środowisku uruchomieniowym nie występuje żadne działanie, rozwiązania są rozwiązywane podczas kompilacji, a niepotrzebne są ignorowane.

0

To może sprawić, że czas kompilacji dłużej, ale będzie musiał albo brak lub znikomy wpływ na wydajność run-time.

8

Nie wpływa to na wydajność przy runtime w ogóle.

będzie prawdopodobnie wzrastać w czasie kompilacji bardzo nieznacznie od:

1) Kompilator musi przeanalizować jeszcze kilka znaków
2) posiada patrzeć identyfikatory spośród kilku kandydatów. Ale ponieważ prawdopodobnie używa to hashtables, nie powinno to być też drogie.

Zgaduję, że spowolnienie kompilatora jest nieistotne.

Przypuszczam, że spowolni to nieco IntelliSense, ponieważ lista musi być wyświetlana, a filtrowanie trwa nieco dłużej.

Usuwanie nieużywanych artykułów jest bardziej stylistyczne niż poprawa wydajności. I musisz uważać na metody rozszerzania, ponieważ są one wprowadzane w zakres za pomocą instrukcji.Na przykład nie usuwam using System.Linq, nawet jeśli jest ona obecnie nieużywana.

+0

Nie do końca spokrewniony, ale czy mógłbyś wyjaśnić więcej dlaczego nie chcesz usunąć 'using System.Linq'? Nie śledzę dokładnie. – Roman

+0

@Roman Ponieważ lubię mieć metody LINQ pokazane w Intellisense. – CodesInChaos

+0

Tak, prawdopodobnie infrastruktura Intellisense jest jedyną, która może mówić o występach z nieużywanymi zastosowaniami. – Steve

1

Brak wpływu na wydajność w czasie wykonywania. Jednak wiele przestrzeni nazw może nieco spowolnić proces wprowadzania kodu i zmniejszać produktywność.