当前位置:  开发笔记 > 编程语言 > 正文

C# - 关于类和内存

如何解决《C#-关于类和内存》经验,为你挑选了1个好方法。

我是相当新的C#,但我会尽力使这个快!;)

这只是一个理论情况,但想象一下:

I)一个人有一个'ClassA',里面有'ClassB','ClassB'里面有'ClassC'.

II) ClassA有一个被调用的方法.方法本身是(不知道这个名称)用已经存在的classB变量"构造"一个​​新的ClassB.如下:

/*CLASS A*/
ClassA
{
    ClassB classB;

    ClassA()
    {
          classB = new ClassB();
    }

    MethodA()
    {
      classB = new ClassB();
    }
    // Other Methods...

}

/*CLASS B*/
ClassB
{
    ClassC classC;

    ClassB()
    {
        classC = new ClassC();
    }

    // Methods...

}

/*CLASS C*/
ClassC
{
  // Loads of variables being used...
}

所以我想知道的是:

a)使用classB会在内存方面发生什么?堆中的相同空间是用于类还是会分配新空间?如果后者是这种情况,GC会以某种方式释放先前的内存吗?

b)无论上述结果是什么,classC会发生什么,加载变量篡改内存?

我们将非常感谢您直接回答或只是阅读一些简单的链接.我试图找到自己的答案,但似乎没有人解释这种荒谬的(?)情况.

在你开始理论这个问题的起源之前,我已经告诉你了.我确实把自己置于类似的情况中:

PrimaryClass

子的Class1

几个班级

子类2

几个班级

所以这个三级应用程序有时会在Sub-Class1和Sub2之间进行更改,它们都控制着"场景".这些"场景"有一些类来帮助管理(通常).这是(我的想法)无法实现的.

问题是Sub-Class1和Sub-Class 2都会占用一些内存并使用一些"资产".因此,我想擦除,是的,你听到了我,将它们从存在中删除,然后在以后再次重新创建它们.我做了一些阅读,但无法提出解决方案.(如上所述,我是C#的新手以及整个托管的.net的事情).关于这方面的任何建议都应该受到赞赏.

好吧,我写了一些比计划更多但是就是这样!期待对此有所了解!:)

问候,罗伯特



1> Quassnoi..:

我会稍微改写一下:

ClassA()
{
  memberB = new ClassB();
}

MethodA()
{
  memberB = new ClassB();
}

在这种情况下,memberB持有对实例的引用classB.

在构造函数中classA,classB创建了新实例(调用它instance 1)并分配了对此实例的引用memberB.

当您调用时methodA,classB会创建另一个实例,并将其引用分配给memberB.memberB现在指向instance 2.instance 1代码中不再引用,GC会在调用后立即清除它.

因此,我想擦除,是的,你听到了我,将它们从存在中删除,然后在以后再次重新创建它们.

C#的全部意义在于你不会弄乱内存.当然,您可以GC.Collect()随时调用,但不能保证释放所有未引用的实例(尽管如实际所示).

如果要对资源进行精细控制,请使用C++/CLI实现资源需求类,继承它们IDisposable,并在using指令范围内调用它们.

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有