Jakie są konsekwencje posiadania niepotrzebnych referencji i zastosowań?

12

Jestem trochę fajnym dziwakiem i mam tendencję do zatrzymywania moich projektów poprzez czyszczenie referencji i usingznaków w każdej klasie, aby zachować tylko to, co faktycznie zostało wykorzystane.

Jaki inny argument mógłbym (oprócz uspokojenia nerwu z OCD) trzymać się podstawowych rzeczy? Myślę, że głównie odniesienia do systemu, każde odniesienie do pracy niestandardowej spowoduje wiele problemów z kompatybilnością wsteczną. Czy ślad wydania jest większy? Skompilować czas dłużej?

MPelletier
źródło
5
Zauważ, że usingsi odniesienia nie są tym samym. Wiele odpowiedzi nie uwzględnia tego.
phoog
1
Jeśli chcesz zachować kod w czystości i używać go do minimum, rozważ zakup ReSharper. Niesamowite rozszerzenie do Visual Studio. Nie mogę żyć / programować bez. ;-)
Anders

Odpowiedzi:

13

Intellisense będzie o wiele bardziej przydatny, jeśli utrzymasz usingminimum, a to wielka zaleta.

Poza tym nie sądzę, aby zyski były jakikolwiek. Może więc kompilator C # będzie działał szybciej o, powiedzmy, 1%; Więc co.

Mike Nakis
źródło
1
Skumulowana wartość tego 1% jest znaczna ... ale zasadniczo można oczekiwać, że kompilator zoptymalizuje wszelkie problemy. Jednak nie mam problemu z czystością
Murph,
C # IntelliSense i tak jest trochę niechlujny od około 2005 roku, kiedy zaczęli wrzucać absolutnie wszystko na listę.
Rei Miyasaka,
@ReiMiyasaka, aby uzyskać IntelliSense na cokolwiek chcesz, a następnie zrób, Ctrl+.aby szybko naprawić „Dodaj przestrzeń nazw XYZ
kizzx2
1
@Murph: bez względu na to, jak duża jest skumulowana wartość 1%, nadal będzie to 1% skumulowanej sumy, więc zawsze będzie nieistotne. Ponadto kompilator nie może zignorować żadnego usings, dopóki nie zorientuje się, że w rzeczywistości są one niepotrzebne, ale nie może tego zrozumieć, chyba że najpierw skompiluje cały plik źródłowy. Podobnie jak w przypadku odniesień do projektów, nie są one odrzucane tylko dlatego, że nie wydają się być używane, ponieważ mogą być używane w sposób dynamiczny (niewykrywalny w czasie kompilacji).
Mike Nakis,
1
Trochę późno, ale w moim przypadku tworzymy aplikację na urządzenie o bardzo ograniczonych zasobach. Dodanie niepotrzebnych odniesień wpłynie na ostateczny rozmiar aplikacji. Cóż, postaramy się dystrybuować pakiet i konkurować z innymi pakietami, większy pakiet może sprawić, że użytkownik zastanowi się dwa razy, czy pobrać aplikację.
hmadrigal
9

Ponieważ jest to praktycznie banalne, aby to zrobić w Visual Studio (proste kliknięcie prawym przyciskiem), dlaczego tego nie zrobić?

Jest to zgodne z Razor Razam , to po prostu dobra inżynieria.

Jeśli chodzi o konsekwencje nie zrobienia tego, zastanów się, co się stanie, jeśli jakiś inny programista spróbuje otworzyć Twój projekt i zawiera (nieużywane) odniesienie do biblioteki, której nie ma na swoim komputerze. Teraz, gdy biedny programista musi dowiedzieć się, dlaczego istnieje nierozwiązane odniesienie i co z tym zrobić.

Jeśli wolisz, rozważ to w kategoriach złotej zasady. Czy chciałbyś przejąć rozwój projektu, który zawierał wiele odniesień do bibliotek, których nie posiadałeś na komputerze i nie miałeś pojęcia, dlaczego one istnieją?

JonnyBoats
źródło
+1, istnieje dodatek, który może to zrobić dla całego rozwiązania. Przypomniało mi to również wideo ClojureScript i Google Closure, w których optymalizacja całego programu jest ważna, ponieważ typowa strona internetowa ma teraz około 1 MB. Dobrym nawykiem jest mieć - do czyszczenia rzeczy, które nie są potrzebne.
Job
6

usinginstrukcje są po prostu po to, aby kompilator mógł w pełni odwoływać się do klas itp. Dodatkowe usinginstrukcje nie będą miały znaczącego wpływu na czas kompilacji.

Ponadto środowisko wykonawcze nie załaduje zestawu referencyjnego, dopóki nie będzie faktycznie potrzebny, więc ponownie nie sądzę, aby wystąpiły negatywne konsekwencje niepotrzebnych referencji.

Jeśli używasz narzędzia takiego jak Odbłyśnik, znajdowanie i usuwanie tych niepotrzebnych bitów można w większości zautomatyzować, więc powiedziałbym, że marnowanie czasu na te działania jest w ogóle marnotrawstwem. Na przykład godzina lub dwie ręczne usuwanie niepotrzebnych usinginstrukcji to więcej niż opłata za licencję na odbłyśnik - i zawiera wiele innych funkcji zwiększających wydajność.

quentin-starin
źródło
Czyszczenie za pomocą jest wbudowaną funkcją VS 2010 (myślę, że również 2008). I ReSharper może również tworzyć referencje. Ale tak, zanim przystąpię do jakiegokolwiek czyszczenia na dużą skalę, zastanowię się nad użyciem narzędzia, które zrobi to za mnie.
MPelletier,
+1 za wyraźne wyrażenie różnicy między nieużywanymi usingsi a nieużywanymi referencjami. Oba są bardzo różne!
phoog
1

Oprócz powyższego, myślę, że nie wspomniano tutaj tutaj, że każde odwołanie wymaga komponentu w ramach .NET lub zewnętrznej DLL. Jeśli jest mowa o zewnętrznej bibliotece DLL, musisz ją mieć, kiedy (i gdzie) uruchomisz oprogramowanie.

Edycja - zgodnie z prawidłowym komentarzem phoog poniżej: Aplikacja nadal będzie działać, jeśli biblioteka DLL nie będzie używana i nie musi być dostarczana z aplikacją tylko dlatego, że została dodana do referencji. Aby zająć się nieużywanymi referencjami w kodzie, możesz spojrzeć na: Usuwanie nieużywanych referencji .

Bez szans
źródło
1
Jeśli odwołanie nie jest używane, nie będziesz potrzebować biblioteki DLL, kiedy i gdzie uruchomisz oprogramowanie.
phoog
@ phoog, dzięki za komentarz. Przynajmniej w .NET VS2010, jeśli ręcznie dodasz odwołanie do rozwiązania, biblioteka DLL zostanie fizycznie dodana do folderu bin, nawet jeśli nie użyjesz go w kodzie.
NoChance
1
Jeśli jednak usuniesz bibliotekę DLL z folderu bin lub opublikujesz aplikację bez biblioteki DLL, aplikacja powinna nadal działać.
phoog
@ phoog, masz rację, dziękuję za zwrócenie na to uwagi. Zmienię post.
NoChance