.net 有垃圾回收器,一般情况下不会有内存泄漏问题(当对象特别大时也会有内存泄露,这是本身机制问题)。
现在我想问一下,如果不小心在析构函数中做了其他操作,比如将该对象又加在了一个全局的集合中,也就是这个对象现在又被"激活"了,而此时CLR已经进行过垃圾回收了,此后不会在对此对象进行回收,它的内存还会不会泄露呢?

解决方案 »

  1.   

    应该不会,不过GC.SuppressFinalize的确是一个危险方法,少碰的好关于.Net的垃圾回收,同一版本的.Net不同的SP版本,被鼓捣后产生的结果都不一样所以还是少捣鼓这些东西为妙.
      

  2.   

    恩,也就是想满足下好奇心,不过GC.SuppressFinalize还是必须要用的,要是使用非托管资源的话最好还是实现微软推荐的Dispose标准模式最为保险,呵呵!
      

  3.   

    今天下午,这坛的一个贴子问PageSetupDialog的问题,我回了,然后下意识的去找一个过去我实现这个问题的工程,因为当年微软没解决全半角输入法的问题,我看了当时的一个类后,马上就一身冷汗,因为我突然想起,至少当时经我手的许多软件,Form都继承了一个基类,当时用那个基类,主要就是为了解决全半角输入法问题,然后不得不去分析SP后,会不会这个基类会不会引发其他的问题.
      

  4.   

    已经运行了析构函数了  难道还会再终结第二次吗?
    这个我记得原来也是在《C# 与.net 3.5高级程序设计》 里面有介绍的
      

  5.   

    我在许多版本的.Net框架中,都能找到不是因为我代码的原因导致内存泄露的问题(反正就是不回收),后来不断的被微软的后续版本纠正了
      

  6.   

    我是搞VB出身的,当年VB类的析构就是干净利落,转C#就很难让人理解,实际上就是垃圾延迟回收现在autoptr的环境变了,各种pool才是真理,为什么会有pool出现,软硬件的衡量而已,
      

  7.   

    怎么可能不回收呢,就算你激活了你的对象,但是GC是不定期运行的,如果下次GC运行的时候你的对象已经没有引用了,肯定会被GC给回收的.