请问大家,关于引用类型的内存分配问题,在WinForm开发中,有一个对象如Person,它有几个属性,这几个属性都是DataTable ,每个DataTable 都有接近8000的记录,当我销毁对象时,在前,先调用DataTable.Clear();再Person=null,可是所占的内存跟销毁前一样大,都有40M,为什么销毁对象后,内存没释放呢?
不是DataTable.Clear();Person=null了之后内存会立即释放,这些都是有GC控制的,他觉得需要的时候才会释放。你做的这些操作这只是告诉GC这些东西可以释放!
那就强制调用垃圾回收
。。。。GC 只是帮你 表面上 ,让你相信 清楚内存上的东西,其实并不是他做的。
还有就是你要理解,堆里的核心:GC堆和Load堆。 GC堆由GC控制,GC堆内 又分 大于8500字节和小于8500字节的 。
而Load堆 这里面的方法表,属性 不是 由GC控制的,而是由 AppDomain控制,退出 AppDomain将清除。