Может кто-нибудь объяснить какие-либо издержки подкласса CLR / DLR? - PullRequest
1 голос
/ 03 января 2011

Если у меня есть библиотека, написанная с использованием CLR-совместимого кода (т. Е. В C #), и я делю некоторые из этих классов на подклассы с помощью DLR (т. Е. В IronPython), это как-то влияет на скорость моей библиотеки CLR (т. Е. Приведение и т. Д.)по сравнению с тем, был ли он разделен на подклассы с использованием только кода, совместимого с CLR?

Я надеюсь, что ответом будет «нет», если DLR не переопределяет любой код, требуемый моей библиотекой my CLR.Я могу написать некоторый код, чтобы эмпирически оценить ответ, но подумал, знает ли кто-нибудь из вас.

Большое спасибо и счастливого нового года!

Джон

1 Ответ

1 голос
/ 05 января 2011

В код вашей библиотеки вообще не добавляются накладные расходы. Введение новых подклассов не изменит поведение CLR вообще. Можно представить версию CLR, которая выполняет анализ иерархии классов или оптимизирует среду выполнения, которые встроены в методы или оптимизируют забросы, где наличие дополнительных подклассов может по умолчанию выполнять эти оптимизации. Но я не знаю каких-либо реализаций CLR, которые выполняют эти оптимизации (конечно, MS CLR этого не делает).

Но работа с подклассами Python может быть немного медленнее. Это связано с тем, что подкласс Python переопределит все виртуальные члены - эти переопределения затем необходимо будет передать в функцию Python, реализующую перегрузку, или в базовый класс. Поэтому всякий раз, когда вы работаете с подклассом объекта в Python, он будет немного медленнее при вызове виртуальных методов. Дополнительные издержки будут состоять из одного или нескольких поисков в словаре в объекте типа Python, чтобы увидеть, реализован ли там метод.

...