下面是个绑定“ComboBox”控件的代码。
//绑定商品名称
string sql_spmc = "select * from spglb";
DataTable dt = access.FillDt(sql_spmc);
SPMC.DataSource = dt;
SPMC.DisplayMember = "spmc";
SPMC.ValueMember = "spmc";现在正常显示,但是如果在下面加上一句:dt.Dispos()则不能帮定ComboBox控件,请问这是为什么?理论上绑定好了应该可以释放了才对啊?其实绑定“DGV”时也是这种情况
//绑定商品名称
string sql_spmc = "select * from spglb";
DataTable dt = access.FillDt(sql_spmc);
SPMC.DataSource = dt;
SPMC.DisplayMember = "spmc";
SPMC.ValueMember = "spmc";现在正常显示,但是如果在下面加上一句:dt.Dispos()则不能帮定ComboBox控件,请问这是为什么?理论上绑定好了应该可以释放了才对啊?其实绑定“DGV”时也是这种情况
直到Form被关闭。
垃圾回收器跟踪并回收托管内存中分配的对象,定期执行垃圾回收以回收分配给没有有效引用的对象的内存
DataGridView.DataSource=dt;
SPMC.DataSource = dt;
SPMC.DisplayMember = "spmc";
SPMC.ValueMember = "spmc";
dt.Dispose();
当执行完
dt.Dispose();可以断点看一下
dt对象本身没有立即被垃圾回收器回收,而是他们相对于两个控件的引用关系发生了变化
这时的DataGridView.DataSource还是引用dt,而SPMC.DataSource已经为null了这里问一下如梦大哥,为什么会有这样的不同呢?