c# - many - vb net array count vs length




Ist es kostspielig, array.length oder list.count in einer Schleife auszuführen? (4)

Es hängt auch davon ab, ob dieser Getter eine Berechnung durchführt oder auf einen bekannten Wert zugreift.

Ich weiß, dass in JavaScript eine for-Schleife wie for(int i = 0; i < arr.length; i++) : for(int i = 0; i < arr.length; i++) ist kostspielig, da es jedes Mal die Array-Länge berechnet. Ist dieses Verhalten in c # für Listen und Arrays ebenfalls kostspielig? Oder zur Kompilierzeit ist es optimiert? Auch was ist mit anderen Sprachen wie Java, wie wird das gehandhabt?


Es ist nicht teuer in C #. Zum einen gibt es keine "Berechnung": Die Abfrage der Länge ist grundsätzlich eine Elementaroperation durch Inlining. Und zweitens, weil ( gemäß seinen Entwicklern ) der Compiler dieses Zugriffsmuster erkennt und tatsächlich alle (redundanten) Grenzprüfungen für den Zugriff auf Array-Elemente optimiert.

Und übrigens glaube ich, dass etwas Ähnliches für moderne virtuelle Maschinen von JavaScript gilt, und wenn es nicht schon ist, wird es sehr bald sein, da dies eine triviale Optimierung ist.


In fast jeder Sprache lautet die Antwort "es hängt davon ab".

Meist hängt es davon ab, ob der Compiler clever genug ist, um feststellen zu können, ob sich die Länge der Liste oder des Arrays ändert, während Sie sich in der Schleife befinden.

Es ist jedoch unwahrscheinlich, dass dies durch die Sprachspezifikation definiert wird.

Es ist also wahrscheinlich davon auszugehen, dass die Kompilierung das nicht herausfinden kann. Wenn Sie wirklich glauben, dass sich die Länge des Objekts nicht ändert, können Sie die Länge zuerst berechnen und diese in Ihren Schleifensteuerungskonstrukten verwenden.

Aber hüte dich vor anderen Themen ...








language-features