Properties - Vor- und Nachteile
-
StephanSch schrieb:
Zeus schrieb:
Sealed die Klasse mal.
Hmm... die call-Befehle sind nun weg und die Laufzeiten sind auch gleich bei dem Beispielcode. Merkwürdig. Wieso werden die Aufrufe bei einer sealed Klasse geinlined, sonst aber nicht?
Eine sealed Klasse ist nicht virtuell. IMO muss ich GPC widersprechen, dass virtuelle Funktionen geinlined werden kann, dass kann nicht einmal ein C++ Compiler.
-
anton_zeiler schrieb:
RCE wird in beiden Varianten NICHT durchgeführt.
Das ist korrekt. Zu erkennen an
cmp eax,dword ptr [edx+4]
-
Zeus schrieb:
Eine sealed Klasse ist nicht virtuell.
Mir scheinen die ganzen unteren Optimierungsphasen äußerst instabil zu sein, was ihre Vorhersehbarkeit anbelangt.
Aber das war bei .NET auch zu erwarten. Man ist der CLR ausgeliefert. Da hat man bei C++ doch etwas mehr Kontrolle über den tatsächlichen Output.
-
Zeus schrieb:
Eine sealed Klasse ist nicht virtuell. IMO muss ich GPC widersprechen, dass virtuelle Funktionen geinlined werden kann, dass kann nicht einmal ein C++ Compiler.
Kommt auf den Fall an. Es ist durchaus möglich virtuelle Funktionen zu inlinen. Nicht in jeder Situation natürlich. Aber prinzipiell kann das ein C++ Compiler auch.
Die Frage ist ob das Objekt polymorph verwendet wird. Wenn ja, dann kann der Aufruf nicht geinlined werden (wir sind ja leider nicht in Eiffel) aber wenn es nicht polymorph verwendet wird dann ist es oft möglich zu inlinen.
-
Hier übrigens noch ein Blogeintrag zur RCE.
http://myexperiences-kuldeep.blogspot.com/2007/11/clr-performance-array-range-check.html
Man sieht, die MSDN ist nicht korrekt was die Aussagen zur RCE anbelangt.
Erst beim zweiten Codeversuch, fand offensichtlich eine RCE statt.
-
der MSDN-Artikel indem RCE vorkommt war damals genau wie er geschrieben wurde. Für die CLR 1.* und jetzt haben wir CLR 4
Außerdem: warum sollte die MSDN die Heuristiken festlegen, und das für immer, wenn sie bedacht sind das zu ändern und überall erwähnt wird dass man sich nicht darauf verlassen soll?
-
anton_zeiler schrieb:
der MSDN-Artikel indem RCE vorkommt war damals genau wie er geschrieben wurde. Für die CLR 1.* und jetzt haben wir CLR 4
Stimmt, hast Recht.
anton_zeiler schrieb:
Außerdem: warum sollte die MSDN die Heuristiken festlegen, und das für immer, wenn sie bedacht sind das zu ändern und überall erwähnt wird dass man sich nicht darauf verlassen soll?
Stimmt auch.
Ok, das Thema ist für mich damit erledigt. War ganz interessant. Danke an alle konstruktiv mitdiskutierenden Forenuser!
-
Shade Of Mine schrieb:
...
Das nächste mal schreib ich explizit unter der Annahme virtuell = polymorph, damit du mir nicht zu widersprachen brauchst :p
-
Zeus schrieb:
Shade Of Mine schrieb:
...
Das nächste mal schreib ich explizit unter der Annahme virtuell = polymorph, damit du mir nicht zu widersprachen brauchst :p
Naja, in vielen Situationen ist das aber nicht der Fall. zB toString ist eine virtuelle Funktion. Wenn ich aber:
Integer i; Console.WriteLine(i.ToString());
habe, dann ist das keine polymorphe verwendung aber dennoch eine virtuelle Funktion.
Auch ist es möglich in einem polymorphen Kontext den Call zu inlinen wenn er mehrmals auf dem selben Objekt aufgerufen wird. Das kann man in virtuellen Maschninen ganz gut machen.
-
Hast du nicht Bessers zu tun, als mich zu belehren, ich hab die wissenschaftliche Arbeit für den Eiffel Compiler selbst gelesen, wie dort virtuelle Aufrufe geinlined wird.
-
anton_zeiler schrieb:
Außerdem finde ich es erstaunlich wie du hier den "Vollexperten" darstellst, immerhin hat er dir helfen probiert (kostenlos und in siener Freizeit). Lies mal selbst deine Beiträge (die übrigens auch zusammengefasster geschrieben werden können, da nicht für jeden Gedanken ein neuer Beitrag sein muss) und versetzt dich in die Lage der Leute die dir helfen wollen. Können diese nachvollziehen was du meinst, wenn du unsauber zitierst und Folgerunden hinschreibst die einen Zusammenhang vermuten lassen?
Selbstverständlich bezeichne ich solche Leute als "Vollexperten". Ich bin jederzeit bereit mir sachbezogene Argumente anzuhören und habe auch kein Problem diese Argumente anzuerkennen.
Das beste Beispiel ist dein letzter Beitrag zur MSDN.
Dein erster Beitrag hier ging aber in die völlig andere Richtung und erinnerte mich an die Aussagen, des besagten "Vollexperten" im anderen Forum.
Ich zitiere diesen Beitrag einmal.
wenn dir OO und Eigenschaften nicht liegen und Performance sehr wichtig dann nimm doch Assembler
Falls du das als "Hilfe" ansiehst, wofür ich dir auch noch dankbar sein sollte das du sie hier kostenlos und in deiner Freizeit mir zur Verfügung stellst, dann hast du dich geschnitten.
Das ist keine sachdienliche Antwort, sondern eine gezielte Provokation (auf Deutsch nennt man das auch Verarschung).
Der "Vollexperte" in dem anderen Forum ging sogar noch zwei Schritte weiter. Zuerst schoß er sich auf die RCE ein, dann verdrehte er meine Aussagen komplett und abschließend warf er mir vor, ich würde das Prinzip der Datenkapselung nicht verstehen. Zuletzt begann er dann Beiträge zu löschen.
So als ob ich behauptet hätte, Freunde, gebraucht bloß keine Properties und macht alle Felder öffentlich zugänglich.
Insofern nein, anton_zeiler, es liegt mit Sicherheit nicht an mir. Es sei denn du kannst beweisen das ich oben gemachte Aussage zur OO getätigt hätte. Was dir nicht gelingen wird, weil ich es nicht gesagt habe.
-
du weißt auch nicht wann Schluss ist
Ich scheinar auch nicht, aber das hier ist meine letzte Antwort, dann kannst du alleine weitermachen...Wenn ich mir deinen Beitrag im anderen Forum durchschaue und eine Aufzählung pro Felder und Contra Eigenschaften sehe, was werde ich dann wohl denken? Dass Felder vorzuziehen sind. Zumindest kommt es genauso rüber. Insofern kann ich dann auch den "Vollexperten" verstehen wenn er mit Kapselung kommt. Und dass er mit RCE recht hatte wurde ja auch in diesem Thema (mehr oder weniger) bestätigt.
Zum Löschen deiner Beiträge kann ich nichts sagen, ich weiß nur dass sie dort relativ scharf bezüglich des Hinwegsetzens über Moderationshinweise sind. Wenn du dagegen "verstoßen" hast wundert mich das entfernen nicht. Aber das ist eine Mutmaßung von mir.Beweisen will ich dir sicher nichts, da du ja sowieso wie Don Quixote dagegen sein wirst. In diesem Sinne viel Erfolg! Ich bin raus.
-
Shade Of Mine schrieb:
Integer i; Console.WriteLine(i.ToString());
-> NullReferenceException
-
David W schrieb:
Shade Of Mine schrieb:
Integer i; Console.WriteLine(i.ToString());
-> NullReferenceException
Kann nicht sei, darüber steht C/C++