1

CLR準拠のコード(つまりC#)を使用して作成されたライブラリがあり、DLR(つまりIronPython)を使用してそれらのクラスの一部をサブクラス化した場合、これはCLRライブラリ(つまりキャストなど)の速度に影響しますか? CLR準拠のコードのみを使用してサブクラス化されましたか?

DLRが私のCLRライブラリに必要なコードをオーバーライドしない限り、答えが「いいえ」であることを願っています。私は経験的に答えをベンチマークするためにいくつかのコードを書くことができますが、誰かが知っているかどうか疑問に思いました。

明けましておめでとうございます!

ジョン

4

1 に答える 1

1

ライブラリコードにオーバーヘッドはまったく追加されていません。新しいサブクラスを導入しても、CLRの動作はまったく変わりません。クラス階層分析またはランタイム最適化を実行するCLRのバージョンを想像できます。これは、メソッドをインライン化するか、キャストを最適化して、追加のサブクラスの存在がそれらの最適化をデフォルトにする可能性があります。しかし、私はそれらの最適化を行うCLR実装を知りません(確かにMS CLRは行いません)。

ただし、Pythonサブクラスの操作は少し遅くなる可能性があります。これは、Pythonサブクラスがすべての仮想メンバーをオーバーライドするためです。これらのオーバーライドは、オーバーロードを実装するPython関数または基本クラスにディスパッチする必要があります。したがって、Pythonでサブクラス化されたオブジェクトを操作しているときはいつでも、仮想メソッドの呼び出しが少し遅くなります。追加のオーバーヘッドは、メソッドがそこに実装されているかどうかを確認するためのPythonタイプオブジェクトへの1つ以上のディクショナリルックアップで構成されます。

于 2011-01-05T02:55:53.680 に答える