2010-12-07 9 views
10

In Visual Studio ist ein Befehl nicht verwendete using-Anweisungen zu entfernenBeeinträchtigt die Anzahl der Namespaces die Leistung?

using System; 
using System.Collections.Generic; 
using System.Configuration; 
using System.Data; 
using System.Drawing; 
using System.IO; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

Gibt es einen Leistungseinbruch ungenutzt usings für zu haben?

+0

Selbst betrachtet, wenn keine Leistungseinbußen gibt es, das macht es nicht eine gute Idee. Es gibt wenig, was ich mehr hasse, als den Gebrauch einer Klasse zu sehen und herauszufinden, WELCHES BESONDERES es ist, weil irgendjemand jeden Namensraum unter der Sonne benutzt. –

+0

Ich weiß was du meinst. Jede Aufgabe muss jedoch priorisiert und geplant werden. –

Antwort

7

Die Anzahl der Namespaces, die in Codedateien verwendet werden, hat keinen Einfluss auf die Laufzeitleistung der Anwendung. Es wirkt sich auf die Kompilierzeit aus, da der Compiler diese Namespaces nach zusätzlichen Elementen wie Typen und Erweiterungsmethoden durchsuchen muss.

Die einzige Laufzeit Auswirkungen die Zahl der Namespaces mir bewusst bin sind

  • Debugging: Die Menge der verwendeten Namensräume in einer bestimmten Code-Datei wird im PDB gespeichert und durch den Debugger während der Namensauflösung zu Rate gezogen. Eine Menge Namespaces könnte theoretisch die Leistung des Debuggers beeinflussen, aber in der Praxis habe ich nicht gesehen, dass dies ein Problem ist.
  • Asp.Net: Wenn das Bereitstellungsmodell mit der Seite von Nutzern auf dem ersten Blick kompiliert wird, kann die Anzahl der Namensräume Ladezeit das erste Mal eine bestimmte Seite beeinflussen wird
+0

Wenn es um ASP.NET geht, werden Seiten nicht optional kompiliert, wenn der Benutzer den Stammordner eingibt? Daher ein Performance-Hit? Oder bin ich weit weg? Ref: http://msdn.microsoft.com/en-us/library/ms178466.aspx –

+0

@ subt13 es betrifft die Startzeit von ASP.Net-Seiten, die bei der ersten Verwendung durch den Benutzer kompiliert werden. Ich werde dieses Szenario hinzufügen. – JaredPar

+0

Ausgezeichnet. Große Antwort/Kommentare. –

1

Ich dachte immer, sie wurden vom Compiler entfernt.

+0

Tatsächlich werden sie nur vom Compiler verwendet. Zur Laufzeit sind Namespaces nur ein Teil der vollständig qualifizierten Klassennamen. – codymanix

3

Es wirkt sich nur auf Kompilierungszeiten aus, wenn der Compiler die Namespaces durchlaufen muss, um die referenzierten Typen zu finden. (Und das stimmt nicht viel.) Es wird die Laufleistung überhaupt nicht beeinflussen.

3

Nein. Namespaces werden verwendet, um Klassennamen zur Kompilierungszeit aufzulösen. Nach der Kompilierung enthält Ihre Assembly nur voll qualifizierte Klassennamen wie System.Collections.Generic.List<int> myList = new System.Collections.Generic.List<int>(), alle Funktionen sind weg.

1

Es gibt keinen Performance-Treffer für nicht verwendete using-Anweisungen. Sie benötigen nur eine Auswertung zur Kompilierzeit.

0

Ich bin mir sicher, dass es irgendwo einen Leistungseinbruch gibt (wahrscheinlich während der Kompilierung), aber es ist wahrscheinlich vernachlässigbar. In jedem Fall würde ich empfehlen, diesen Befehl auszuführen. Dadurch wird dieser potenzielle Leistungseinbruch beseitigt und Ihr Code leichter lesbar und wartbar. Und es wird unbenutzte Namesapces aus Intellisense entfernen, wodurch es einfacher wird, zu codieren.

Verwandte Themen