没错!
没必要管它,你管不了的。
如果你一定要释放,试一下用Dispose()方法,强制释放内存。

解决方案 »

  1.   

    使用
    using()
    {}
    来把你自动掉用吧.
      

  2.   

    对于大部分变量,我也从来没考虑过内存释放的问题,C#确实都能够管理得不错。
    但是这次的情况是这样的:用户选择图片数据库里的一个类别,然后我就动态的把图片创建成picturebox在panel上显示出来。每批图片都好几MB。用户随便浏览几次,内存就呼呼的往上涨。下午的时候,dispose每个picturebox但是不见内存回来,所以才发问的。晚上又试了一下dispose每个picturebox的image,结果内存都释放了。原来image属性在picturebox类里只是一个引用,所以即使删除了picturebox,image属性也还得手动释放。这样理解是否正确?
      

  3.   

    托管的代码,CLR是会帮你解决内存问题的。
    你非得要强行释放,那就用System.GC.Collect()吧。
      

  4.   

    Finalize()方法,不过会降低系统性能!
      

  5.   

    不同意楼上各位的说法。
    在.net中,内存的分配的的确应该自动管理,但那仅仅限于为托管类分配的受托管管理的内存。
    实际上,除了托管资源外,系统中还有很多非托管资源,比如image类为image分配的句柄,为图像分配的内存。这些宝贵资源并不受clr管理,clr只知道image类所占用的内存,并不知道该类还是用了很多非托管资源。
    虽然通常clr在回收这些类的时候这些类的finalize方法也会回收相应的资源,但这通常都太迟了。所以这些类都实现了IDispose接口,要求用户在不使用该类的时候,显示调用Dispose方法。也就是说,对于实现了IDispose的类,我们都应该显示调用Dispose方法。
      

  6.   

    “虽然通常clr在回收这些类的时候这些类的finalize方法也会回收相应的资源,但这通常都太迟了”
    看了楼上这句话,我又较长时间跟踪了一下内存的变化,发现我以前观察有误。现在对于那个panel控件,只要Clear掉所有的Controls,内存过段时间会被自动收回来的。
    看来C#确实会自动释放掉这些内存资源,并不需要用户自己释放。
    只是释放内存的时机好像是其本身自己的机制定的,似乎当用户操作频繁、系统繁忙的时候,他就不着急回收,好比我昨天观察到的情况。一旦当系统闲下来后,内存释放回收工作就很快的在后台执行了。
    由于不懂内部机制,只好从表面变化妄加推断了。各位有何见解?
      

  7.   

    同意FlyingHero(雁翔工作室) 的看法
      

  8.   

    同意hwndhwnd(何宗键) 的说法,可以自己来启动GC的