抄了这几年代码,话说学而不思则罔,死而不学则殆。
最近在看别人代码,发现有这么一段//清理对象。
name = nullname 这个对象在执行到最后的时候给赋值null了。
我记得如果说 
string name = "名字";
这样其实是初始了两个变量吧,一个是name,一个是存放"名字"的地方。
那这样写 name=null,如果说是释放了,岂不是就释放了一个地方么?
还有这样写name=null 会提高系统效率么?在Csharp中。在C++中必须要释放吧?
还请大侠来指点指点。谢谢! :)CsharpGC垃圾回收

解决方案 »

  1.   

    其实差不多一样的效率,好像网上有人专门解释这个。就算赋值为null,也没有立刻释放内存,还是要等待垃圾回收线程去回收的。
      

  2.   

    name = null  这个哪是垃圾回收
    估计人家只是代码需要暂时赋值为null  楼主你想多了。
      

  3.   

    MS一般不建议 手动去执行垃圾回收的  这样如果代码写的不好回去破坏自己的垃圾回收机制gc.collection好像这个来进行回收的把
    可以放在析构函数里面
      

  4.   

    Net中,如果name只是string之类的托管类型,那样写并没什么意义
    控制一旦超出局部变量的使用范围,会立即出栈被回收的
    如果name是SqlConnection或者Win32中的非托管资源,直接name=null,不但不能提高效率,反而可能会导致内存泄漏。
    必须Dispose等方式显示释放,垃圾回收器无法回收它们的。
      

  5.   

    MSDN上说了,Net中不推荐析构,写不好反而会影响效率。推荐的做法是实现IDispose接口来处理