今天被面试官问到一个题目,C#里面的内存虽然是.net管理的,但是运行时间长了仍然可能会占据大量内存不释放。如果不使用系统级别的GC功能,在每个类当中如何添加功能使得一个类的实例在不被使用的时候,对象的内存/资源能够被释放?这个问题如何回答呢? 谢谢。

解决方案 »

  1.   

    GC.Collect(); 在你特别需要的时候,去执行它。
      

  2.   

    是考你析构函数?dispose对象?
      

  3.   

    应该是在考你 实现IDispose 接口。
      

  4.   

    托管资源没法手动释放,只能等GC,GC回收不回收由内部算法决定,外界不能强制干预。
    至于通知GC回收也仅仅是通知,可不一定回收之后你想释放的托管资源就一定会释放
      

  5.   

    确实应该是在问你IDispose 接口的实现。不过感觉如果是托管资源,没啥意义,没引用后GC会自动回收。
      

  6.   

    面试题?下次再有这样的问题 直接打面试官两拳 你就明白了
    GC垃圾回收机制 是自动运行的 现在的GC都分为三个级
    0级 当内存达到一个数值的时候会自动对所有标记释放的内存进行释放 然后重新排列内存
    一级和二级都是一样
    不同的系统 这个数值是不一样的
    32位操作系统下一个net程序好像最大能够占用四个G的内存 即使计算机没有那么大的内存条 也会写在虚拟内存的(好想每个系统都有这样的一个虚拟内存的文件)
    如果运行时间长了 大量内存不释放 也是程序代码有问题
    是不是有全局的集合 这样的东西 如果你往里面add一个对象不remove得话 他就永远占用内存 直到程序关闭