C#:简单vs复杂对象和内存使用

时间:2009-10-17 22:55:05

标签: c# memory object

在处理大型馆藏时,以下哪种方法更好?

具有字段/属性的类SimpleObject和包含SimpleObject所需的所有方法实现的类SimpleObjectController。在运行时,我构建了一个SimpleObjects集合,实例化一个SimpleObjectController并调用它的方法,传递我想要使用的SimpleObject。

类“ComplexObject”,它在传统的OO方法中聚合SimpleObject和SimpleObjectController。在运行时,我有一个ComplexObject集合,迭代它们,根据需要调用它们的方法。

有人向我建议,第一种方法在内存使用方面更为可取,因为所有重量级代码只在一个对象中而不是在集合中的每个对象中。我的理解是,如果我们在一个集合中有1000个这样的对象,那并不意味着在内存中有1000个相同的方法实现。将有1000个数据实例,但它们将共享一个代码实例(x86代码段和数据段?)。它似乎也面对一般的OO原则和封装。

2 个答案:

答案 0 :(得分:4)

你应该采取第二种方法。代码没有每个实例的成本:每个都有一个代码副本,而不是每个实例。因此第一种方法没有记忆益处。你是对的,OO风格是将函数放入数据中,以便封装它们;如果你采用第一种方法,有人可能很容易通过直接使用而不是通过控制器方法来操纵SimpleObject。

答案 1 :(得分:1)

我认为除了有两个类定义而不是一个类定义之外,没有任何区别。

你认为没有1000个方法实现的实例是正确的。编译完成后,所有方法都成为“全局”方法,这些方法具有隐藏的ComplexObject参数,该参数映射到C#中的this关键字。