c# - 虚拟属性是否比具体属性慢?

标签 c# performance oop visual-c++ interface

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

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

假设我还有一个 C++/CLI 类 MyConcreteClass,它实现了这个接口(interface)并且其 header 声明如下:

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

显然,当您通过接口(interface)访问虚拟成员时,运行时必须在类中寻找实现,并且会比成员不是虚拟成员时慢。

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

我特别询问直接在具体对象类型上使用虚拟成员的性能。如果 MyProperty 是一个虚拟成员,这会更慢吗?

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

最佳答案

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

更新: 我不确定引入 C++ 会如何改变事情。我的猜测是这会很相似,因为您仍在访问虚拟方法。我不确定它会如何改变它。但这再次只是我的猜测。希望其他人可以提供更多帮助。

关于c# - 虚拟属性是否比具体属性慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15633168/

相关文章:

java - 在 1 个窗口中制作 2 个创建行 iDempiere

c# - Any() 扩展方法是否处理空值?

java - "Loop unswitching"优化不起作用

c++ - 我的代码是以正确的方式使用 OOPS 概念还是我让它变得不必要的复杂?

c - 涉及在 C/C++ 中生成的大量矩阵的速度优化 - 存储在文件中与重新计算

mysql - MediaWiki 分析输出解释

java - 是 M :N a bad style in OOP? 有没有更好的办法来管理 m :n relationships?

c# - WPF 只能打开一个窗口?

c# - 无法从 Windows Mono C# 项目访问 Linux gcc 编译的 .so 共享库

c# - 使用 try catch 时如何知道可能的异常?