2010-11-12 7 views
22

Ich weiß vielleicht bereits die Antwort auf diese Frage, aber ich dachte, es war es wert, sich zu fragen. Wenn ich eine Ladung von using Anweisungen in meiner Codedatei habe, die nicht verwendet werden;Unbenutzt mit Anweisungen

  1. Hat das irgendwelche nachteiligen Auswirkungen auf die Leistung?
  2. Wie behandelt der Compiler sie bei der Kompilierung/Laufzeit?

Dank

+4

Sie sprechen von ** Anweisungen ** oder ** Anweisungen **? – icecrime

+0

Meinst du Laufzeit-Performance oder Compiler-Performance? Der Compiler behandelt sie zur Laufzeit nicht per definitionem. – Simone

+0

Duplikat von http://stackoverflow.com/questions/136278/why-should-you-remove-uncessess-cusing-directives? – JLWarlow

Antwort

19

tut, dass jede Art von schädlichen Auswirkungen auf die Leistung haben?

Nr

Wie funktioniert der Compiler Deal mit ihnen bei der Kompilierung/Laufzeit?

Zur Kompilierzeit tun sie, was Sie erwarten würden, d. H. Fungieren als Namespace-Importe. Sie erscheinen nicht in der kompilierten Binärdatei: Jede Referenz auf einen Typ verwendet den vollständig qualifizierten Namen.

Der Compiler überprüft den Namespace in einer using-Anweisung, auch wenn es nicht benötigt wird; Wenn Sie einen Namespace entfernen, schlagen alle using-Anweisungen fehl, die darauf verweisen.

Für mich sind redundante using Anweisungen wie redundante Kommentare. Sie machen für den Compiler keinen Unterschied, enthalten jedoch zu viele und riskieren, Ihre Entwickler zu verwirren.

+0

Danke ... wie ich es erwartet habe. –

1

Es gibt keine Leistungseinbußen zur Laufzeit, die Verwendung wird zur Kompilierzeit aufgelöst und unbrauchbare werden ignoriert.

0

Es kann die Kompilierung länger, aber es wird entweder keine oder nur eine vernachlässigbare Auswirkung auf Laufzeitleistung haben.

8

Es hat keinen Einfluss auf Laufzeit überhaupt.

Es wird wahrscheinlich sehr leicht erhöhen kompilieren Zeit seit:

1) Der Compiler noch ein paar Zeichen
2) Es Identifikatoren unter mehr Kandidaten nachschlagen muss analysieren muss. Aber da dies wahrscheinlich Hashtables verwendet, sollte es auch nicht teuer sein.

Ich würde vermuten, die Compiler Verlangsamung ist vernachlässigbar.

Ich denke, es verlangsamt Intellisense etwas mehr, da die Liste, die es anzeigen und filtern muss, etwas länger wird.

Entfernen unbenutzter Nutzungen ist mehr eine stilistische als eine Leistungsverbesserung. Und Sie müssen auf Erweiterungsmethoden achten, da sie durch die Verwendung von Anweisungen in den Geltungsbereich gebracht werden.Zum Beispiel entferne ich nicht using System.Linq, auch wenn es derzeit nicht verwendet wird.

+0

Nicht genau verwandt, aber könnten Sie bitte mehr erklären, warum Sie 'using System.Linq' nicht entfernen möchten? Ich folge nicht genau. – Roman

+0

@Roman Weil ich gerne LINQ Methoden in Intellisense gezeigt habe. – CodesInChaos

+0

Ja, wahrscheinlich ist die Intellisense-Infrastruktur die einzige, die über Performances mit ungenutzten Nutzungen sprechen könnte. – Steve

1

Keine Leistungseinbußen in der Laufzeit. Viele Namespaces können jedoch die Fertigstellung des Codes etwas verlangsamen und die Produktivität verringern.

Verwandte Themen