2011-01-03 8 views
1

Wenn ich eine Bibliothek habe, die mit CLR-konformen Code geschrieben wurde (zB in C#) und einige Klassen mit dem DLR (zB in IronPython) unterklassiere, hat dies einen Einfluss auf die Geschwindigkeit meiner CLR-Bibliothek (zB Casting etc.) wenn es nur unter Verwendung von CLR-konformen Code in Unterklassen aufgeteilt wurde?Kann jemand CLR/DLR-Unterklassen-Overhead erklären?

Ich hoffe, die Antwort ist "Nein", solange der DLR nicht den Code meiner CLR-Bibliothek überschreiben. Ich kann einen Code schreiben, um die Antwort empirisch zu bewerten, aber ich fragte mich, ob jemand von Ihnen das wusste.

Vielen Dank und guten Rutsch ins neue Jahr!

John

Antwort

1

Es gibt keinen Overhead überhaupt in Ihrer Bibliothek Code hinzugefügt. Die Einführung der neuen Unterklassen ändert das Verhalten der CLR überhaupt nicht. Sie können sich eine Version der CLR vorstellen, die Klassenhierarchieanalysen oder Laufzeitoptimierungen durchführt, die Inline-Methoden implementieren oder Cases optimieren, bei denen das Vorhandensein zusätzlicher Unterklassen diese Optimierungen standardmäßig übernehmen könnte. Aber ich kenne keine CLR-Implementierungen, die diese Optimierungen durchführen (sicherlich nicht die MS CLR).

Aber die Arbeit mit den Python-Unterklassen könnte etwas langsamer sein. Das liegt daran, dass die Python-Unterklasse alle virtuellen Member überschreibt. Diese Overrides müssen dann an die Python-Funktion übergeben werden, die die Überladung implementiert, oder an die Basisklasse. Wenn Sie also mit einem in Python untergeordneten Objekt arbeiten, wird es bei Aufrufen virtueller Methoden etwas langsamer. Der zusätzliche Overhead besteht aus einem oder mehreren Dictionary-Lookups in das Python-Type-Objekt, um festzustellen, ob die Methode dort implementiert ist.