C# 虚拟财产是否比具体财产慢?

C# 虚拟财产是否比具体财产慢?,c#,performance,oop,visual-c++,interface,C#,Performance,Oop,Visual C++,Interface,假设我有一个名为IMyInterface的C#接口,定义如下: // C# code public interface IMyInterface { string MyProperty { get; } } public ref class MyConcreteClass : public IMyInterface { public: virtual property String^ MyProperty { String^ get() sealed { return

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

// C# code
public interface IMyInterface
{
  string MyProperty { get; }
}
public ref class MyConcreteClass : public IMyInterface
{
 public:
  virtual property String^ MyProperty 
  {
    String^ get() sealed { return String::Empty; };
    void set( String^ s ) sealed { };
  }
};
假设我还有一个C++/CLI类,
MyConcreteClass
,它实现了这个接口,其头声明如下:

// C# code
public interface IMyInterface
{
  string MyProperty { get; }
}
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++如何改变事情。我的猜测是,这将是类似的,因为您仍然在访问一个虚拟方法。我不知道它会如何改变它。但这又一次只是我的猜测。希望其他人能提供更多帮助。

虚拟方法速度较慢,因为运行时必须检查该方法的实际实现。所以这是一张额外的支票。你仍然可以在每秒数十万次。所以不要为此而紧张。在Java中,默认情况下每个方法都是虚拟的

更新:
我不确定介绍C++如何改变事情。我的猜测是,这将是类似的,因为您仍然在访问一个虚拟方法。我不知道它会如何改变它。但这又一次只是我的猜测。希望其他人能提供更多帮助。

做一些基准测试,看看结果。俗话说:数字说明问题。用一个虚拟的和具体的属性,用一个紧密的循环运行几十万次甚至几百万次,然后测量差异。分析器和性能分析器的存在是有原因的;)这听起来像是一个过早的微观优化案例。做一些基准测试,看看结果。俗话说:数字说明问题。用一个虚拟的和具体的属性,用一个紧密的循环运行几十万次甚至几百万次,然后测量差异。分析器和性能分析器的存在是有原因的;)这听起来像是过早的微观优化。我用我正在寻找的具体数据更新了我的问题。你能更新你的答案以反映吗?我用我正在寻找的具体数据更新了我的问题。你能更新你的答案来反映吗?