1

IMyInterface次のように定義されたC#インターフェイスがあるとします。

// C# code
public interface IMyInterface
{
  string MyProperty { get; }
}

MyConcreteClassこのインターフェイスを実装し、ヘッダーが次のように宣言されているC ++/CLIクラスもあるとします。

public ref class MyConcreteClass : public IMyInterface
{
 public:
  virtual property String^ MyProperty 
  {
    String^ get() sealed { return String::Empty; };
    void set( String^ s ) sealed { };
  }
};

明らかに、インターフェースを介して仮想メンバーにアクセスする場合、ランタイムはクラス内の実装を探す必要があり、メンバーが仮想でない場合よりも遅くなります。

IMyInterface obj;
obj->MyProperty = "HELLO";

具体的なオブジェクトタイプで仮想メンバーを直接使用した場合のパフォーマンスについて具体的に質問しています。MyProperty仮想メンバーだった場合、これは遅くなりますか?

MyConcreteClass obj;
obj->MyProperty = "HELLO";
4

1 に答える 1

4

ランタイムがメソッドの実際の実装をチェックする必要があるため、仮想メソッドは遅くなります。つまり、1つの追加チェックです。あなたはまだ毎秒何十万ものこれらをすることができます。だからそれについて強調しないでください。Javaでは、すべてのメソッドはデフォルトで仮想です。

更新:C++を導入すると状況がどのように変わるかわかりません。あなたはまだ仮想メソッドにアクセスしているので、それは似ていると思います。それがどのようにそれを変えるのかわかりません。しかし、もう一度、これは私の推測です。うまくいけば、他の誰かがもっと助けてくれるでしょう。

于 2013-03-26T09:18:29.077 に答える