请问此方法能够获取数据集吗?不会被Dispose()清空吧??
public DataSet GetTable(string sql)
{
SqlDataAdapter sda = new SqlDataAdapter(sql, conn);//创建数据适配器对象
DataSet ds = new DataSet();//创建数据集
sda.Fill(ds);//填充数据集
ds.Dispose();
return ds;//返回数据集
}
我测试后为什么能返回具体的数据集呢?Dispose不是起到释放资源的吗?
public DataSet GetTable(string sql)
{
SqlDataAdapter sda = new SqlDataAdapter(sql, conn);//创建数据适配器对象
DataSet ds = new DataSet();//创建数据集
sda.Fill(ds);//填充数据集
ds.Dispose();
return ds;//返回数据集
}
我测试后为什么能返回具体的数据集呢?Dispose不是起到释放资源的吗?
在以前传统的编程技术中,程序员们要负责删除他们自己的对象,并且有这样一种特权,可以告诉对象:“你,现在把自己从内存中清除出去!”有了.NET,他们就没有这种能力了,将来会在不确定的时候对对象进行删除。
确切地说,删除所发生的时间是不确定的,换言之,作为开发人员的你不会知道GC在什么时候会运行。这就意味着在删除对象的最后一个引用和从内存中实际删除该对象间并没有即时的联系,这就是所谓的不确定结束。
调用Dispose()后,当GC回收资源时,是不是就不再检查该变量是否还存在引用而是直接删除?
如果是这样,Dispose之后,再使用此变量
是不是会存在如下问题?比如上面语句:
ds.Dispose();
return ds;
执行ds.Dispose()后立马运行GC如下:
ds.Dispose();
//开始运行GC
return ds;
那么ds就是不存在的变量了