DataTable-Schleifenleistungsvergleich

8

Welche der folgenden Funktionen hat die beste Leistung?

Ich habe Methode zwei in JavaScript mit enormen Leistungszuwächsen implementiert, konnte jedoch keinen Gewinn in C # messen und fragte mich, ob der Compiler bereits Methode 2 ausführt, selbst wenn er wie Methode 1 geschrieben wurde.

Die Theorie hinter Methode 2 ist, dass der Code nicht bei jeder Iteration auf DataTable.Rows.Count zugreifen muss, sondern einfach auf den Int c.

zugreifen kann

Methode 1

%Vor%

Methode 2

%Vor%     
GateKiller 07.08.2008, 10:01
quelle

1 Antwort

4

Nein, dies ist nicht möglich, da es keine Möglichkeit gibt, für einen Wert im Zeitverlauf auszudrücken.

Wenn der Compiler dazu in der Lage sein sollte, müsste es eine Garantie geben, dass der Code den Wert zurückgibt, dass der Wert konstant ist und sich für die Dauer der Schleife nicht ändert.

Aber in diesem Fall können Sie der Datentabelle als Teil Ihrer Schleife neue Zeilen hinzufügen. Daher liegt es an Ihnen, diese Garantie in der Art und Weise zu übernehmen, wie Sie es getan haben.

Kurz gesagt, der Compiler führt diese Optimierung nicht durch, wenn der End-Index etwas anderes als eine Variable ist.

Im Fall einer Variablen, bei der der Compiler nur den Schleifencode betrachten und sehen kann, dass diese bestimmte Variable nicht geändert wird, könnte er dies tun und den Wert vor dem Start der Schleife in ein Register laden, aber jede Leistung Gewinn davon wäre höchstwahrscheinlich vernachlässigbar, es sei denn, Ihr Schleifenkörper ist leer.

Fazit: Wenn Sie wissen oder akzeptieren wollen, dass der end loop index für die Dauer der Schleife konstant ist, legen Sie ihn in eine Variable.

Bearbeiten: Lesen Sie Ihren Beitrag erneut, und ja, möglicherweise sehen Sie auch in beiden Fällen geringfügige Leistungssteigerungen, da der JITter den Code optimiert. Der JITter könnte Ihren End-Index-Lesevorgang in einen direkten Zugriff auf die Variable innerhalb der Datentabelle optimieren, die die Zeilenanzahl enthält, und ein Lesezugriff ist sowieso nicht so teuer. Wenn auf der anderen Seite das Lesen dieser Eigenschaft eine sehr teure Operation wäre, würden Sie einen bemerkbareren Unterschied sehen.

    
Lasse Vågsæther Karlsen 07.08.2008, 10:09
quelle

Tags und Links