Ist diese "move declaration näher am Gebrauch" wirklich vorzuziehen? [Duplikat]

8

Resharper will, dass ich das ändere:

%Vor%

... dazu:

%Vor%

... aber auf diese Weise (so scheint es zumindest) werden die Variablen N-mal deklariert, einmal für jedes Mal durch die while-Schleife. Ist der Resharperized-Weg wirklich besser als das Original?

    
B. Clay Shannon 16.08.2012, 16:43
quelle

4 Antworten

16

Ja, das ist besser, weil Sie den Umfang der deklarierten Variablen einschränken. Es gibt keine Auswirkungen auf die Leistung, wenn Sie sie innerhalb der Schleife deklarieren. Der Grund dafür, dass Resharper diese Änderung vorschlägt, besteht darin, dass Sie sie nicht außerhalb der Schleife verwenden.

    
rsbarro 16.08.2012, 16:45
quelle
8

Im Allgemeinen ist es eine gute Programmierpraxis, Variablen in einem möglichst engen Rahmen zu deklarieren. Die Gründe dafür sind:

  1. Informationen ausblenden.
  2. Leichter zu verstehen.
  3. Weniger Wahrscheinlichkeit, etwas zu bolluxieren.

Obwohl es so aussieht, als würden die Variablen bei jeder Iteration über die Schleife neu deklariert, werden sie zur Kompilierzeit deklariert, nicht als Laufzeit. Der Speicherplatz wird für die Variable [s] im Stapelrahmen zugewiesen, und derselbe Speicherplatz wird für jede Iteration über die Schleife wiederverwendet.

    
Nicholas Carey 16.08.2012 16:52
quelle
4

Ja, aber die Deklaration dauert zur Laufzeit nicht. Sie belegen nicht mehr Speicher, da der Compiler nur seine Speicherplätze wiederverwenden wird.

    
Daniel 16.08.2012 16:49
quelle
2

Der Compiler optimiert im Allgemeinen solche Ausdrücke und "hebt" die Variablendeklaration außerhalb der Schleife, da die Variable selbst nicht von den Schleifenbedingungen abhängig ist. Dies erzeugt effektiv den Code, den Sie im ersten Beispiel demonstriert haben.

In diesem Fall besteht der Vorschlag von Resharper darin, einige redundante Codezeilen zu entfernen und den vorkompilierten Bereich zu reduzieren.

    
Steve Guidi 16.08.2012 16:48
quelle

Tags und Links