【问题标题】:C#: simple vs complex objects and memory usageC#:简单与复杂的对象和内存使用
【发布时间】:2009-10-17 22:55:04
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c# memory object


    【解决方案1】:

    您应该采用第二种方法。代码没有每个实例的成本:每个都有一份代码副本,而不是每个实例。因此,第一种方法对内存没有好处。你说得对,OO风格就是把函数和数据放在一起,以便封装它们;如果您采用第一种方法,那么有人很容易通过直接使用 SimpleObject 而不是通过控制器方法来误操作。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-06-29
        • 2012-01-30
        • 1970-01-01
        • 2016-10-09
        • 2014-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多