我可能在这里丢失了一些东西,但是我需要专业人士对垃圾收集进行一些说明。
如果我在一个类中有一个引用的对象(在这种情况下为DataTable),它说一个datagridview(将引用保持在表单上),那么DAL实例会保持活跃,因此不会被垃圾收集吗?如下例所示:
private void button1_Click(object sender, EventArgs e)
{
DAL sql=new DAL();
dgvResult.DataSource=sql.GetData();
}
我的DAL课程
private string _dbCon = "server=127.0.0.1;database=northwind;integrated security=true";
public DataTable GetData()
{
DataTable query = new DataTable();
using (SqlConnection connection = new SqlConnection(_dbCon))
using (SqlCommand command = new SqlCommand(GetCommand(), connection))
using (SqlDataAdapter adapter = new SqlDataAdapter(command))
{
adapter.Fill(query);
}
return query;
}
我知道没有错误检查,但这是为了演示问题
答案 0 :(得分:2)
如果问题是“在您的方法完成后DAL
将可以被收集” 。
假设唯一的 reference 来自DAL sql=new DAL()
,并且该类中没有其他 references ,并且其他任何东西都没有,因此一旦它退出范围内,实例化的DAL
类将可用于收集(当垃圾收集器感到满意时)
答案 1 :(得分:0)
是的,DataTable将保留在内存中(但不是DAL对象)。在处理完表格之前...