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

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

class BankRecord { public int id; public int balance; public void GetOverdraft() { ... } public void MakeBankrupt(){ ... } } 

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

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

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

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

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

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

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