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/

相关文章:

.net - Microsoft Office Web 组件无法与 Visual Studio 2012 一起使用

c# - 在列表<T>中查找findall

performance - 快速、无分支的 unsigned int 绝对差

.net - 完全被 async/await 搞糊涂了

java用代理打开url需要很长时间

iphone - 从API插入34000条记录到iphone中的sqlite

c# - 根据下图,wpf 中的滚动条样式

c# - 事件目录的角色安全

c# - 获取 IE 屏幕截图返回黑色图像

c# - 避免 aspnet_compiler 运行 PreApplicationStart 方法