Die MSDN "Writing Faster Managed Code: Know What Things Cost" ist ziemlich nett, aber es wurde für CLR v1 im Jahr 2003 geschrieben. Gibt es eine aktualisierte Version von dieser irgendwo?Gibt es eine aktualisierte Version von "Writing Faster Managed Code: Wissen, was die Dinge kosten"?
Gibt es eine aktualisierte Version von "Writing Faster Managed Code: Wissen, was die Dinge kosten"?
Antwort
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.
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.
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:
- 1. Gibt es eine aktualisierte Version der Java Code Conventions
- 2. Gibt es Kosten für die großzügige Nutzung von NSLog?
- 3. Aktualisierte Version von Datei nicht
- 4. Code zu wissen, was?
- 5. Gibt es eine generische Version von Array.newInstance?
- 6. Gibt es eine von Java 8 unterstützte Version von SqlJ?
- 7. Gibt es eine Version von $ getJSON, die keinen Rückruf verwendet?
- 8. Gibt es eine Version von os.getcwd(), die Symlinks nicht dereferenziert?
- 9. Es gibt einige Dinge, die Sie einfach nicht testen können?
- 10. was sind beste Anfangs Dinge, die ich
- 11. Gibt es eine Leistung Kosten Autobox ein primitives Literal?
- 12. Bild zuschneiden wie aktualisierte Version von Instagram
- 13. Gibt es eine "langsame" Future.traverse Version?
- 14. Postgresql: Gibt es eine psql-Version von "@@" von Oracle sqlplus?
- 15. Gibt es Kosten für die Verwendung des Push Notification Service?
- 16. Gibt es Dinge wie E-Mail-Hooks?
- 17. Dinge, die man beim Schreiben einer Spielengine wissen sollte
- 18. Gibt es eine Möglichkeit, SMO in C++ außer Managed Code zu verwenden?
- 19. Gibt es eine Möglichkeit zu wissen, welche groovige Version in Grails Projekt verwendet wird?
- 20. Was sind die "Kosten" der .NET-Reflektion?
- 21. Gibt es eine Python-Version für die JVM-basierte Metrikbibliothek
- 22. Gibt es eine Möglichkeit, eine DLL-Version zu erzwingen?
- 23. Gibt es PHP-Code-Visualisierungstools?
- 24. Gibt es eine Selenium 2-Version von Selenium IDE?
- 25. Gibt es pro Methode Kosten für die Instanziierung von Objekten in Java?
- 26. Ich möchte wissen, was die folgende Fortran 77 Code tut
- 27. Build "native code + wrapper + managed code" Projekte
- 28. Gibt es eine parametrische Version von faulen `ByteString`?
- 29. Gibt es eine log4net-Version für Silverlight?
- 30. Gibt es ein Makro, das die iOS SDK-Version angibt, für die der Code kompiliert wird?
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! –
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
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. –