在类上有很多方法会增加该类对象的开销吗?

Chr*_*rry 15 c# java memory

想象一下,我正在使用一个类来从数据库中恢复项目

class BankRecord {

public int id;
public int balance;

public void GetOverdraft() {
...
}
public void MakeBankrupt(){
...
}

}
Run Code Online (Sandbox Code Playgroud)

现在,如果只有2种方法(如上所述)或100种方法(可能其中一些非常大),使用它的性能会发生什么变化.

如果所有方法都放在每个对象上,那么实例化数百个这些对象会更糟吗?这适用于c#/ java类型语言,但对所有语言都知道.

或者是一个好的做法是拥有一个单独的类,对这些对象执行所有操作,并将对象保留为纯数据类?

Jos*_*ant 8

创建对象实例时,运行时不会复制代码.创建实例时,只有成员字段在内存中分配空间.因此,除非您有其他设计理由,否则不应创建"仅数据"类.

话虽如此,还有其他最佳实践的原因,为什么你可能不想要一个有多种方法的类(例如上帝对象反模式).


Bri*_*eon 6

在CLR中,对象具有指向该类型的元信息的指针,该元信息包括反射和方法表所需的所有内容.无论表中的条目数是多少,在方法表中查找方法实现的开销都是相同的.有关更多信息,请参阅此文章.简而言之,所有对象都有8个字节的开销(4个用于类型句柄,4个用于syncblock).

然而,反思可能更慢.它只是因为如果你想枚举类型的元数据,那么如果在该类型中声明了更多的成员,它将会更慢.