【问题标题】:sealed Class Performance [duplicate]密封类性能[重复]
【发布时间】:2013-03-17 05:45:33
【问题描述】:

我读到了sealed 类,知道密封类不能被继承。

如果我在不需要继承密封类的情况下用密封类装饰类,我会获得更高的性能吗?

// cs_sealed_keyword.cs
// Sealed classes
using System;
sealed class MyClass 
{
   public int x; 
   public int y;
}

class MainClass 
{
   public static void Main() 
   {
      MyClass mC = new MyClass(); 
      mC.x = 110;
      mC.y = 150;
      Console.WriteLine("x = {0}, y = {1}", mC.x, mC.y); 
   }
}

【问题讨论】:

  • Seamed 类似乎与性能关系不大。

标签: c# performance


【解决方案1】:

曾几何时,在 OO 的早期,非虚拟方法通过避免 vtable 访问而提供了显着的性能优势。然而,如今,sealed 修饰符背后的基本原理更多地是关于设计选择,控制客户端代码与库的交互方式。

就像标记方法 private 允许您保留实现细节以供将来改进一样,标记类 sealed 可以保证(除非有阴暗的反射恶作剧)您的库的用户将无法插入他们的代码通过不明智地子类化您的实现,以意想不到的、可能是灾难性的方式进入您的调用图。

这在安全情况下尤其重要,在这种情况下,严格控制的类结构可能会被单个闯入者子类完全撤消。因此,您会在 System.Security 命名空间中发现大量密封类。

【讨论】:

    【解决方案2】:

    使用密封修饰符时性能几乎没有提升。编译器在最底层做微优化。

    JIT 编译器可以通过非虚拟方式调用方法来生成更高效的代码

    也可以看看这个Thread

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-15
      • 1970-01-01
      • 2013-10-24
      • 2021-01-06
      • 2010-11-24
      • 2019-05-04
      相关资源
      最近更新 更多