c# - .NET 中具有深度继承的类的内存分配

标签 c# .net performance memory-management

如果我有类 A、B、C、D、E 和像 X、Y、Z 这样的接口(interface),并且像这样对系统建模:

class B : A, X
class C : B, Y
class D : C, Z
class E : D

如果 A 是抽象基类而 E 是感兴趣的类,当我创建 E 的实例时,它会依次创建 A、B、C、D 的实例, X, Y, Z 除了E

如果是这样的话,这会产生巨大的性能开销吗?不是内存,而是运行时和 GC 方面。

最佳答案

是的,它会创建 A、B、C 和 D 的“嵌入式”实例
不,它不会创建 X、Y 和 Z 的实例(因为它们是接口(interface))

内存分配或 GC(ABCD)没有额外的开销,因为 E 的实例被分配为 1 个 block 。任何运行时开销都将完全取决于所涉及的构造函数。

总会有一个构造函数链(从 E 到 A)被执行,可能是默认构造函数,但也可以在一个级别调用多个构造函数。

关于c# - .NET 中具有深度继承的类的内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2382634/

相关文章:

c# - 与在 C# 中隐藏和显示表单相比,关闭表单并重新加载所有数据有什么好处?

c# - 如何使用 LINQ 执行不区分大小写的 GUID 比较?

c# - 如何获得 Microsoft Word 表格单元格的最大拆分长度?

javascript - 输入类型文本不应是可编辑的

c# - 状态栏大红叉出现

c# - DAL "Typed DataSets"或自定义业务对象

c# - c#/.net x.x 是否有双向链表的实现(可以向后迭代)?

android - android类中可以使用多少个异步任务?

sql - 查询性能、索引和预测所覆盖索引的写入时间性能影响?

c# - GC.AddMemoryPressure() 不足以按时触发 Finalizer 队列执行