Eine Optimierung die man besser vermeidet

6. März 2005 19:34

Angenommen, man hat ein Objekt, über das iteriert werden kann - zum Beispiel ein String oder ein Array. Den dafür zuständigen Code würde jeder C++ Programmierer wie folgt hinschreiben:

int l=a.Length;
for( int i=0; i<l; i++)
{
a[i] = 0;
}

Grund dafür: Das Zugriff auf die Länge wird aus der Schleife entfernt, und damit wird die Performance der Schleife besser.

Das gilt nicht in der CLR.

Statt dessen verwendet man folgenden Code:

for( int i=0; i<a.Length; i++)
{
a[i] = 0;
}

Der untere Code ist im Rahmen von .Net Code tatsächlich schneller als das erste Beispiel. Der Grund dafür ist der, das die CLR bei jedem Zugriff auf ein Array einen Bounds-Check durchführen muss - es sei denn, der JIT Compiler kann 'sehen', das auf keinen Fall ein Überschreiten der Array-Grenzen eintreten wird.

Im zweiten Code-Beispiel kann er das - und darum wird bei diesem Code der Bounds-Check auch nicht durchgeführt. Und das wiederum führt dazu, das der untere Code tatsächlich schneller ist als der obere. Praktischer Nebeneffekt: Die Sache ist außerdem besser lesbar.

Edit: Der Code wurde nicht richtig dargestellt, sodas Teile fehlten. Danke für die Hinweise per Kommentar... :-)
Jetzt klappt es aber mit der Anzeige.

Kommentare

07.03.2005 08:05:44 #

Also bei mir würde sich der Compiler bei sowas verschlucken Wink

for( int i=0; i---->{
   a[i] = 0;
}

Thomas

07.03.2005 08:22:56 #

Hallo!

Ich denke auch, dass da ein wenig Code fehltSmile



A. Wölfer

07.03.2005 09:38:09 #

Thomas, Andreas,

vielen dank für den hinweis. ich habe das gerade korrigiert.

das problem ist wohl, das 'dasBlog' probleme beim posten von quellcode hat. beim 'ersten' posten geht das zwar prima, bearbeitet man das posting dann aber spaeter (z.b. um einen tippfehler zu korrigieren), dann werden teile des quellcodes verschluckt. m.a.w.: will man ein posting mit quellcode bearbeiten, dann muss man wohl jedesmal sicherstellen, das der auch noch ok ist.

habe das schon bei sourceforge als bug eingetragen.

thomas woelfer

Kommentare sind geschlossen

Kalender

<<  Mai 2012  >>
MoDiMiDoFrSaSo
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

View posts in large calendar