从数据访问层收集垃圾

时间:2019-06-11 08:54:32

标签: c#

我可能在这里丢失了一些东西,但是我需要专业人士对垃圾收集进行一些说明。

如果我在一个类中有一个引用的对象(在这种情况下为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;
}

我知道没有错误检查,但这是为了演示问题

2 个答案:

答案 0 :(得分:2)

如果问题是“在您的方法完成后DAL将可以被收集”

假设唯一的 reference 来自DAL sql=new DAL(),并且该类中没有其他 references ,并且其他任何东西都没有,因此一旦它退出范围内,实例化的DAL类将可用于收集(当垃圾收集器感到满意时)

答案 1 :(得分:0)

是的,DataTable将保留在内存中(但不是DAL对象)。在处理完表格之前...