2009-04-05 5 views

Antwort

1

Ich weiß nicht, dass einer das ersetzt, aber das Buch CLR via C# wird Ihnen viel tiefes und relevantes Wissen für die Funktionsweise der CLR liefern und wo sie viel Zeit und Ressourcen verbraucht.

2

Ich denke nicht, und ich denke nicht, dass eine aktualisierte Version so anders sein würde.

Die Timing-Zahlen würden anders sein, da die Testmaschine wahrscheinlich neuer und schneller wäre, aber die Beziehung zwischen den Tests wäre ziemlich gleich.

Der Artikel befasst sich mit den Low-Level-Effekten von allgemeinen Operationen in verwaltetem Code, und das hat sich nicht viel verändert, seit der Artikel geschrieben wurde. Die neuen Versionen des Frameworks haben eine Menge Funktionalität hinzugefügt, aber alles basiert auf den Grundelementen, die seit C# 1.0 verfügbar sind.

16

Nein. Ich habe es nie aktualisiert, aber ich denke, mit entsprechenden Salzkörnern genommen, die allgemeinen Ratschläge und die meisten Faustregeln in dem Artikel immer noch gut heute.

(Das heißt, es wäre interessant, das Experiment heute zu wiederholen, haben sich geändert, um zu sehen, wie der Urzeit, wie der generierte Code geändert hat, und wie Mikroprozessoren haben sich geändert.)

Die relativen Gemeinkosten der meisten Primitiven gewonnen Ich habe mich nicht sehr verändert, aber einige werden sich dramatisch verändert haben. Zum Beispiel wurde die mittelmäßige Leistung des nicht statischen Delegate-Aufrufs drastisch verbessert (in .NET 2.0, wenn ich mich richtig erinnere). Ich würde es hassen zu denken, dass eine Praktizierende heute alles tun würde, um Delegierte zu vermeiden, weil ich es 2003 als sehr teuer gemeldet habe.

Seit .NET 1.1 würde ich erwarten, dass sich viele kompilierte Codesequenzen geändert haben; es würde neue JIT-Compileroptimierungen geben (die in Mikrobenchmarks nicht so gut angezeigt werden); verschiedene Mischungen von JIT'd und NGEN'd Code (und NGEN wurde in meinem Artikel nicht untersucht); und Schlüsselsubsysteme wie der Müllsammler wurden im Laufe der Jahre kontinuierlich optimiert.

Ich wiederhole meinen warnenden Rat bezüglich des Potenzials von Speichersystemeffekten, um die Kosten für eine beliebige Anzahl primitiver Operationen mit verwaltetem Code zu übertönen - und wieder, dass sich viel verändert hat. Zum Beispiel ging ein Großteil der CLR-Performance-Arbeit in 03-04 in ein besser funktionierendes Set-Verhalten (wie das Minimieren schmutziger privater Seiten) von NGEN-System-Assemblys.

Natürlich ist das Thema des Artikels der Imperativ, sorgfältig und aufmerksam die Leistung Ihres Codes zu messen, und dieses Thema ist zeitlos.

Übrigens wollte ich immer einen Follow-up-Artikel über die erwarteten/typischen Zeit- und Raumkosten der besten paar hundert meist verwendeten .NET-BCL-Methoden machen und als warnende Geschichten ein paar der Horrorgeschichten haben wir an der .NET-Performance gearbeitet. Das führte zu sehr interessanten Überlegungen darüber, wie die empirische Leistung einer Klassenbibliothek/eines Frameworks, wie sie von echten Praktizierenden in der Wildnis verwendet wird, zu charakterisieren ist ...

Vielen Dank für Ihr Feedback und vielen Dank für Ihr anhaltendes Interesse .

p.s.Ich sehe Vance Morrison anschließend eine große zweiteilige MSDN-Serie zu diesem Thema geschrieben - wenn Sie meinen Artikel gefallen hat Sie diese lieben:

http://msdn.microsoft.com/en-us/magazine/cc500596.aspx

http://msdn.microsoft.com/en-us/magazine/cc507639.aspx

+1

Ich sollte hinzufügen, dass Mikroprozessoren haben sich geändert. Natürlich bieten sie mehrere Threads und/oder Kerne. Und CPU-Designer konnten Ausführungsspuren von OOP- und JVM/CLR-Anwendungen testen, um ihre Mikroarchitekturen zu optimieren. Zum Beispiel ermöglicht eine viel bessere Verzweigungsvorhersage im Kontext von virtuellen Methodenaufrufen und kurzen Methodenaufrufen/-rückgaben einen Teil des Codes, den das JIT nicht optimieren kann, um es jetzt mit weniger Risiken, Rollbacks oder Blockierungen außer der Reihe auszuführen. Einige Gemeinkosten sind komplett weg optimiert. Dies macht Microbenchmarking viel problematischer und gefährlicher! –

+0

Obwohl einige Mikroprozessoren angefangen haben, sich in die entgegengesetzte Richtung zu bewegen, zurück in Richtung mehr in Ordnung und mit wörtlichen Registern (zB PPC, Larabee), was eine Menge Pipeline-Strafen schmerzhafter macht. – Crashworks

+0

So wahr! Ich denke, da der Trend der "Energieeffizienz einer Berechnung, die die Geschwindigkeit einer Berechnung übersteigt, weiter an Fahrt gewinnt (vorausgesetzt, dass die Mischung aus parallelisierter" Durchsatz-Software "wirtschaftlich interessanter wird), werden wir vielleicht mehr von diesen einfacheren Mikroarchitekturen sehen sogar eine Mischung aus komplexen und einfachen in heterogenen Chip-Multiprozessoren. Interessanterweise könnte sich das Hardware-Pendel zurückschwingen und sich mit der Zeit in Änderungen des VM-Codegens und der Organisation widerspiegeln! Software formt Hardware und umgekehrt. –

Verwandte Themen