我的填充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();  //展开节点
        }

解决方案 »

  1.   

    有多少条记录就创建多少了对象
    这样做没有问题
    一个TreeNode不可能保存所有的记录
    也不需要考虑如何释放
    tvw1.Nodes.Clear();执行后,运行期会自动释放不必要的TreeNode对象
      

  2.   

    如果没有记错,treenode你即便是只初始化了一个,只要使用nodes.add,就会自动创建对象的,所以不用担心创建了太多。另外如果数据库读取,建议初始化到内存表内,然后再初始化node,会比较快。
      

  3.   

    出了你的while循环,你的treenode对象句柄就已经释放了,等垃圾回收就好了。那么珍视你的几G内存还是别用C#了。改用C++或C吧。
      

  4.   

    对不起,看错了,是treenode已经加到treeview的nodes中了。这些对象都是存在并且要使用的啊。为什么要考虑内存释放呢?