虽然是asp.net的分类,但其实不是说asp.net,大家原谅了,再没建立新的分类。
首先我们得明确托管资源和非托管资源的定义。我一向不怎么喜欢看定义,觉的不好理解。通俗的说,我自己的理解:
1.非托管资源:就是系统创建的,一般会有Dispose方法,比如什么控件啦,系统组件啦,文件啦,哎呀。。。其实我也不是很懂啦。不好意思。
2.托管资源:就是非非托管资源。呵呵,我觉的是用户自己创建的,比如说类的对象,确切的说我这次就是为了我自己创建的类的对象而研究这个问题的啦。
从网上看的说实现了IDispose接口可释放资源,可后来发现怎么也不能把对象释放了,越来越糊涂了,经过查找,找出了点结论,总结了一下,不讲定义了,因为我也不懂。哈哈。
1.Dispose是用来释放非托管资源的,而不是内存。MSDN的解释是Releases the unmanaged resources used by the Control,而不是释放内存! 通俗一点儿说,.NET窗体也是需要句柄的(Handle),这是非托管资源。当调用Dispose()方法后,这个窗体的Text、Name、 Visable等属性仍然可以访问,因为Dispose并没有释放该窗体的内存。但是此时,如果再次调用Show()、ShowDialog()那么就会导致异常,因为窗体至关重要的句柄已经被OS回收了,回收的代码就是在Dispose里面执行的。
2.对于托管资源,是需要GC来释放内存的。例如:
B b = new B();
b = null;//符合销毁条件
GC.Collect();//进行垃圾回收
GC.WaitForPendingFinalizers();
需要声明的是,GC.Collect()并没有立即释放内存,而是之后系统确定时间来进行垃圾回收的。其实通俗的一点说,就算不用GC,当系统检查到当前对象在以后的程序不会再用了,GC也会自动进行垃圾回收的。
说了这么少,其实也是乱七八糟的,我也是就理解了一点,大家还知道点什么就与我一起讨论吧。呵呵,这次我把QQ号留下吧。 592044573