我的填充treeview的代码有问题吗?
关键是,我的 while循环中,取 SqlDataReader 对象的每一条记录,填充到treeview中,
可是我创建了很多 TreeNode 对象(即有多少条记录就创建多少了对象),
这样会不会造成内存泄漏呀?因为创建这么多对象,并没有释放它们,我也不知道,如何释放他们。
能不能不实例化这么多对象,只用一个 TreeNode对象呢?另外,规范的写法是什么,我第一次用到 treeview控件。
//填充 treeview
private void FillTvw1()
{
objzjh.GetMenu(out myreader); //取菜单编码和菜单名称 TreeNode n_dd = new TreeNode("生产调度");
n_dd.Tag = "AA"; tvw1.Nodes.Clear();
tvw1.Nodes.Add(n_dd);
while (myreader.Read())
{
TreeNode n_bm = new TreeNode(myreader["菜单名称"].ToString());
n_bm.Tag = myreader["菜单编码"].ToString();
n_dd.Nodes.Add(n_bm);
}
myreader.Close(); n_dd.Nodes[0].Checked = true;
tvw1.SelectedNode = tvw1.Nodes[0];
tvw1.Nodes[0].ExpandAll(); //展开节点
}
关键是,我的 while循环中,取 SqlDataReader 对象的每一条记录,填充到treeview中,
可是我创建了很多 TreeNode 对象(即有多少条记录就创建多少了对象),
这样会不会造成内存泄漏呀?因为创建这么多对象,并没有释放它们,我也不知道,如何释放他们。
能不能不实例化这么多对象,只用一个 TreeNode对象呢?另外,规范的写法是什么,我第一次用到 treeview控件。
//填充 treeview
private void FillTvw1()
{
objzjh.GetMenu(out myreader); //取菜单编码和菜单名称 TreeNode n_dd = new TreeNode("生产调度");
n_dd.Tag = "AA"; tvw1.Nodes.Clear();
tvw1.Nodes.Add(n_dd);
while (myreader.Read())
{
TreeNode n_bm = new TreeNode(myreader["菜单名称"].ToString());
n_bm.Tag = myreader["菜单编码"].ToString();
n_dd.Nodes.Add(n_bm);
}
myreader.Close(); n_dd.Nodes[0].Checked = true;
tvw1.SelectedNode = tvw1.Nodes[0];
tvw1.Nodes[0].ExpandAll(); //展开节点
}
这样做没有问题
一个TreeNode不可能保存所有的记录
也不需要考虑如何释放
tvw1.Nodes.Clear();执行后,运行期会自动释放不必要的TreeNode对象