关于将整个对象作为参数存储到其他对象的性能

时间:2013-02-03 19:05:49

标签: c# memory

我有一个Object A可以产生Object B的系统。一个Object A可以生成任意数量的Object B,并且有多个Object A

在我的程序中,了解哪个Object A生成Object B(由于各种原因)非常有用。目前,每当创建Object B时,我只会将创建它的Object A存储为Object B内的参数。但这对我来说并不合适。

问题1:有没有办法只存储Object A内的正确Object B的引用,而不是整个对象?或者这实际上是发生了什么?

问题2:这样做的方式我现在对内存效率不高吗?

3 个答案:

答案 0 :(得分:2)

问题1:

是的,这是可能的。您可以传递对创建者对象的引用,例如通过构造函数。 也可以是公共财产制定者或公共领域,但我建议使用构造函数。

public class ObjectB
{
    public ObjectA Parent {get; private set;}

    public ObjectB(ObjectA parent)
    {
        this.Parent = parent;
    }
}

public class ObjectA
{
    private ObjectB GetNewObjectB()
    {
         return new ObjectB(this);
    }
}

问题2:

对象引用在4bytes/8bytes32bit/64bit OS。所以你可以大致想象额外的内存消耗,并确定,如果它是一个问题(恕我直言,这对大多数应用程序来说不是问题)。

答案 1 :(得分:0)

问题1:是 - 如果你有

class A {}

class B
{
  A creator;
}

然后'creator'引用就是 - 指向对象实例的指针而不是内容本身的副本。

问题2:我认为我没有足够的信息来回答这个问题 - 如果你需要存储在B中的参考,那么效率不高。如果你对它变得无效感到高兴,你可能想把它变成WeakReference。

答案 2 :(得分:0)

类是引用类型,因此如果您的类B具有类型类A的字段,则只有对A实例的引用存储在字段中,而不是副本整个对象。

class B
{
    //creator is a reference to the instance of A which created this instance
    private A creator;
}