Was sind die Folgen unnötiger Referenzen und Verwendungen?

12

Ich bin ein bisschen verrückt und neige dazu, meine Projekte zu behalten, indem ich Referenzen und usings in jeder Klasse bereinige, um nur das zu behalten, was tatsächlich verwendet wird.

Welches andere Argument könnte ich (abgesehen von der Beruhigung meiner Zwangsstörung) vorbringen, um mich an das Wesentliche zu halten? Ich denke hauptsächlich an Systemreferenzen. Jeder Verweis auf benutzerdefinierte Arbeit bringt eine Menge Probleme mit der Abwärtskompatibilität mit sich. Ist der Release-Footprint größer? Kompilierzeit länger?

MPelletier
quelle
5
Beachten Sie, dass usings und Referenzen nicht dasselbe sind. Viele der Antworten berücksichtigen dies nicht.
Phoog
1
Wenn Sie den Code sauber halten und möglichst wenig verwenden möchten, sollten Sie den Kauf von ReSharper in Betracht ziehen. Erstaunliche Erweiterung von Visual Studio. Ohne kann ich nicht leben / programmieren. ;-)
Anders

Antworten:

13

Intellisense ist für Sie um einiges nützlicher, wenn Sie sich usingauf ein Minimum beschränken, und das ist ein großer Vorteil.

Davon abgesehen glaube ich nicht, dass es einen Gewinn gibt. Vielleicht arbeitet der C # -Compiler also um 1% schneller. Na und.

Mike Nakis
quelle
1
Der kumulative Wert von 1% ist beachtlich ... aber grundsätzlich würde man erwarten, dass der Compiler alle Probleme wegoptimiert. Ich habe jedoch kein Problem damit, einfach aufgeräumt zu sein
Murph
C # IntelliSense war ohnehin ein bisschen chaotisch, seit sie um 2005 begannen, absolut alles in die Liste zu werfen.
Rei Miyasaka
@ReiMiyasaka, damit Sie IntelliSense für alles bekommen, was Sie wollen, und dann tun Ctrl+., um "Add Namespace XYZ" schnell zu beheben
kizzx2
1
@Murph: Egal wie groß der kumulative Wert von 1% ist, er wird immer noch 1% der kumulierten Summe sein, also wird er immer belanglos sein. Außerdem kann der Compiler keine usings ignorieren, bis er herausgefunden hat, dass sie tatsächlich nicht erforderlich sind, aber er kann dies nicht herausfinden, es sei denn, er hat zuerst Ihre gesamte Quelldatei kompiliert. Wie bei Projektreferenzen werden sie nicht verworfen, nur weil sie scheinbar nicht verwendet werden, da sie möglicherweise dynamisch (während der Kompilierung nicht erkennbar) verwendet werden.
Mike Nakis
1
Ein bisschen spät, aber in meinem Fall erstellen wir eine App für ein Gerät mit sehr begrenzten Ressourcen. Das Hinzufügen unnötiger Referenzen wirkt sich auf die endgültige Anwendungsgröße aus. Und nun, wir werden versuchen, das Paket zu verteilen und mit anderen Paketen zu konkurrieren. Ein größeres Paket kann den Benutzer zweimal überlegen lassen, ob er die App herunterladen soll oder nicht.
Hmadrigal
9

Da dies in Visual Studio praktisch trivial ist (einfacher Rechtsklick), warum nicht?

Dies steht im Einklang mit Occams Rasiermesser , es ist einfach nur gute Technik.

Überlegen Sie, was passiert, wenn ein anderer Entwickler versucht, Ihr Projekt zu öffnen, und es einen (nicht verwendeten) Verweis auf eine Bibliothek enthält, die sich nicht auf seinem Computer befindet. Jetzt muss der arme Entwickler herausfinden, warum diese ungelöste Referenz existiert und was dagegen zu tun ist.

Wenn Sie es vorziehen, betrachten Sie es in Bezug auf die goldene Regel. Möchten Sie die Entwicklung eines Projekts übernehmen, das viele Verweise auf Bibliotheken enthält, die Sie nicht auf Ihrem Computer haben und von denen Sie keine Ahnung haben, warum sie dort sind?

JonnyBoats
quelle
+1 gibt es ein Add-In, das dies für die gesamte Lösung tun kann. Dies erinnerte mich auch an ClojureScript- und Google Closure-Videos, bei denen die Optimierung des gesamten Programms wichtig ist, da eine typische Webseite jetzt etwa 1 MB groß ist. Es ist eine gute Angewohnheit, Dinge zu reinigen, die nicht benötigt werden.
Job
6

usingAnweisungen dienen lediglich dazu, dass der Compiler Klassen usw. vollständig referenzieren kann. Zusätzliche usingAnweisungen haben keinen nennenswerten Einfluss auf die Kompilierungszeit.

Außerdem lädt die Laufzeitumgebung eine referenzierte Assembly erst dann, wenn sie tatsächlich benötigt wird. Daher glaube ich auch hier nicht, dass nicht benötigte Referenzen negative Konsequenzen haben.

Wenn Sie ein Tool wie Reflector verwenden, kann das Auffinden und Entfernen dieser unnötigen Teile weitgehend automatisiert werden. Daher würde ich sagen, dass es verschwenderisch ist, überhaupt viel Zeit für diese Aktivitäten aufzuwenden. Das manuelle Entfernen nicht benötigter usingAnweisungen in ein oder zwei Stunden zahlt sich nicht nur für eine Reflector-Lizenz aus, sondern ist auch mit vielen anderen produktivitätssteigernden Funktionen ausgestattet.

Quentin-Starin
quelle
Das Reinigen mit ist eine integrierte Funktion von VS 2010 (ich denke auch 2008). Auch die Referenzen kann ReSharper übernehmen. Aber ja, bevor ich mich auf eine großangelegte Bereinigung einlassen würde, würde ich ein Tool verwenden, um dies für mich zu tun.
MPelletier
+1, um die Unterscheidung zwischen nicht verwendeten usings und nicht verwendeten Referenzen deutlich auszudrücken . Die beiden sind sehr unterschiedlich!
Phoog
1

Darüber hinaus wurde hier vermutlich noch nicht erwähnt, dass jede Referenz eine Komponente innerhalb des .NET-Frameworks oder eine externe DLL erfordert. Wenn auf eine externe DLL verwiesen wird, muss diese angegeben werden, wann (und wo) Sie die Software ausführen.

Bearbeiten - Laut gültigem Kommentar von phoog unten: Die Anwendung würde weiterhin ausgeführt, wenn die DLL nicht verwendet wird und nicht mit der Anwendung ausgeliefert werden muss, nur weil sie Referenzen hinzugefügt wurde. Um nicht verwendete Verweise im Code zu entfernen , sollten Sie Folgendes beachten : Entfernen nicht verwendeter Verweise .

Keine Chance
quelle
1
Wenn die Referenz nicht verwendet wird, benötigen Sie die DLL nicht, wenn und wo Sie die Software ausführen.
Foto
@phoog, danke für deinen Kommentar. Zumindest in .NET VS2010 wird die DLL, wenn Sie der Lösung manuell einen Verweis hinzufügen, physisch zum Ordner bin hinzugefügt, auch wenn Sie sie nicht im Code verwenden.
NoChance
1
Wenn Sie die DLL jedoch aus dem Ordner bin löschen oder die Anwendung ohne die DLL veröffentlichen, sollte die Anwendung weiterhin ausgeführt werden.
Phoog
@phoog, du hast recht, danke, dass du darauf hingewiesen hast. Ich werde den Beitrag bearbeiten.
NoChance