虚拟属性比具体属性慢

本文关键字:属性 虚拟 | 更新日期: 2023-09-27 18:06:05

假设我有一个名为IMyInterface的c#接口,定义如下:

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

假设我也有一个c++/CLI类MyConcreteClass,它实现了这个接口,它的头声明如下:

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";

虚拟属性比具体属性慢

虚方法比较慢,因为运行时必须检查方法的实际实现。所以这是一个额外的检查。你仍然可以每秒处理成千上万个这样的数据。所以不要有压力。在Java中,每个方法默认都是虚的。

更新:我不确定引入c++会带来什么改变。我的猜测是,这将是相似的,因为您仍然访问一个虚拟方法。我不确定它会如何改变它。但这只是我的猜测。