W jaki sposób na wydajność wpływa nieużywana dyrektywa using?


110

Program Visual Studio automatycznie utworzy przy użyciu instrukcji za każdym razem, gdy utworzysz nową stronę lub projekt. Niektóre z nich nigdy nie będą używane.

Visual Studio ma przydatną funkcję „usuwania nieużywanych zastosowań”.

Zastanawiam się, czy wystąpi jakikolwiek negatywny wpływ na wydajność programu, jeśli instrukcje using, do których nigdy nie ma dostępu, pozostają wymienione na początku pliku.


Szukałem go przed zapytaniem, ale się nie pojawił.
KdgDev

6
FWIW, ten post ma lepsze SEO: był to dla mnie pierwszy wynik w Google. Z 2 połączonych oryginałów jeden jest niedostępny (usunięty), a drugi jest sformułowany na tyle inaczej, aby dodać wartość do tego posta, nawet jeśli jest to tylko przekierowanie.
DaveD

@DaveD pierwszy dla Ciebie, ponieważ Google zna Twoje dokładne preferencje i historię wyszukiwania. W komputerze mojego przyjaciela nie był pierwszy.
ilias iliadis

Odpowiedzi:


133

Nieużywane użycie nie ma wpływu na wydajność aplikacji w czasie wykonywania.

Może to wpływać na wydajność środowiska IDE i ogólną fazę kompilacji. Powodem jest to, że tworzy dodatkową przestrzeń nazw, w której musi nastąpić rozpoznawanie nazw. Jednak są one zwykle niewielkie i nie powinny mieć zauważalnego wpływu na wrażenia ze środowiska IDE w większości scenariuszy.

Z tych samych powodów może również wpływać na wydajność obliczania wyrażeń w debugerze.


39
Im więcej zastosowań, tym wolniejszy będzie Intellisense
Riegardt Steyn

14

Nie, to tylko kwestia czasu kompilacji / stylu kodowania. Pliki binarne .NET używają w pełni kwalifikowanych nazw pod maską.


3
Czy to oznacza, że ​​dłuższe nazwy klas i metod mają niewielki, ale rzeczywisty (jeśli niewymierny) wpływ na czasy kompilacji JIT?
Jared Updike

8

Brak wpływu na szybkość wykonywania, ale może mieć niewielki wpływ na szybkość kompilacji / inteligencję, ponieważ istnieje więcej potencjalnych przestrzeni nazw do wyszukiwania odpowiedniej klasy. Nie martwiłbym się tym zbytnio, ale możesz użyć elementu menu Organizuj użycie, aby usunąć i posortować instrukcje using.


8

Poniższy link Dobra lektura o tym, dlaczego usuwać nieużywane odniesienia, wyjaśnia, w jaki sposób przydatne jest usuwanie nieużywanych odniesień z aplikacji.

Poniżej kilka fragmentów z linku:

  1. Usuwając wszelkie nieużywane odwołania w aplikacji, uniemożliwiasz CLRzaładowanie nieużywanych modułów, do których istnieją odwołania, w czasie wykonywania. Oznacza to, że skrócisz czas uruchamiania aplikacji, ponieważ ładowanie każdego modułu zajmuje trochę czasu i pozwala uniknąć posiadania metadanych ładowania kompilatora, które nigdy nie będą używane. Może się okazać, że w zależności od rozmiaru każdej biblioteki czas uruchamiania ulega znacznemu skróceniu. Nie oznacza to, że aplikacja będzie działać szybciej po załadowaniu, ale warto wiedzieć, że czas uruchamiania może się skrócić.

  2. Kolejną zaletą usunięcia nieużywanych odniesień jest zmniejszenie ryzyka konfliktów z przestrzeniami nazw. Na przykład, jeśli masz oba System.Drawingi System.Web.UI.WebControlsodwołujesz się, możesz zauważyć, że wystąpią konflikty podczas próby odwołania się do Imageklasy. Jeśli używasz w swojej klasie dyrektyw, które pasują do tych odwołań, kompilator nie może określić, której z nich użyć. Jeśli podczas programowania regularnie używasz autouzupełniania, usunięcie nieużywanych przestrzeni nazw zmniejszy liczbę wartości autouzupełniania w edytorze tekstu podczas pisania.


5

Nie, kompilacja programu obejmuje kilka procesów. Kiedy kompilator zacznie szukać referencji (klas, metod), użyje tylko tych użytych w kodzie. Dyrektywa using mówi tylko kompilatorowi, gdzie ma szukać. Wiele nieużywanych instrukcji using może mieć problem z wydajnością, ale tylko w czasie kompilacji. W czasie wykonywania cały zewnętrzny kod jest odpowiednio linkowany lub dołączany jako część pliku binarnego.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.