首页 > 代码库 > SQL Server 基础知识-DataTable的 .Dispose(); .Clear(); = null;
SQL Server 基础知识-DataTable的 .Dispose(); .Clear(); = null;
.Clear()的比较没有什么意思,因为只是把DataTable清空而已,在堆中任然分配内存,一般要比较也是比较Close()方法,不过DataTable没有这个方法
至于Dispose和null的区别就很有意思了
首先
DataTable dt = new DataTable();
你的知道dt在栈上,指向托管堆的 new DataTable()对象
而dt = null;的意思是让 dt不指向任何对象,此时 new DataTable()这个真实的对象还在内存中,等待GC的回收(究竟什么时候回收是垃圾回收机制的问题)
而dt.Dispose();的意思是销毁 new DataTable();这个对象,但dt仍然指向这个被销毁的对象的地址;所以此时dt是不为null的,但它也无法使用
自己可以看下下面代码的结果
DataTable dt = new DataTable();
dt.Dispose();
MessageBox.Show((dt == null).ToString());
在实际开发中,一般将 dt设置为null就足够了,可以等待GC的回收。如果要使用Dispose()方法,一般是
using(DataTable dt = new DataTable())
{
}
这样会在大括号结束的时候隐式地调用 Dispose()方法,而且dt成为一个局部变量马上出了作用域,也不会有调用错误
===============================================================
如何,主动把=null的进行回收呢
===============================================================
GC.Collect();
使用此方法尝试回收无法访问的所有内存。
无论对象在内存中的时间有多长,所有的对象均被考虑回收;不过,在托管代码中引用的对象不会被回收。使用此方法强制系统尝试回收最大可用内存量。
SQL Server 基础知识-DataTable的 .Dispose(); .Clear(); = null;
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。