您的位置:首页 > 博客中心 > 数据库 >

用递归读取数据库(*.MDB)生成树节点(TreeNode)

时间:2022-03-14 11:10

加载数据库记录生成树节点(TreeNode),才1500多个记录就要用4分多钟,实在太慢,经过思考,减少了一些不必要的查询和赋值,速度提升得比较明显,可能是机器较旧,最终结果都不理想,当然,这个与自己的技术太烂有关。


数据库中有1500多个记录,用递归的方法将记录一次性全部添加到TreeNode当中,第一次加载用时4分多钟,修改之后3分多钟,再次修改后是1分多钟。项目运行环境:单核CPU,2GB DDR2内存,Win7 x86旗舰版,C# 2010 Express,.NET4,ACCESS(*.MDB)数据库。

原代码:
        //递归添加子节点
        public static void AddTreeNode(TreeNode node,String GUID)
        {
            node.Name = GUID;
            DataTable table = PublicTools.AccessHelper.ExecuteDataTable("select * from FamilyTree where P_GUID = @P_GUID AND Generation > 1", new OleDbParameter("@P_GUID", node.Name));
            foreach (DataRow row in table.Rows)
            {
                TreeNode n = new TreeNode();
                n.Name = row["M_GUID"].ToString();
                n.Text = row["NameText"].ToString();
                n.Tag = row["Code"].ToString();
                node.Nodes.Add(n);
                AddTreeNode(n,n.Name);
            }
        }

第一次修改:减少了一个多余的参数,注释掉TreeNode的Tag属性赋值
         //递归添加子节点
        public static void AddTreeNode(TreeNode node)
        {
            //node.Name = GUID;
            DataTable table = PublicTools.AccessHelper.ExecuteDataTable("select * from FamilyTree where P_GUID = @P_GUID AND Generation > 1", new OleDbParameter("@P_GUID", node.Name));
            foreach (DataRow row in table.Rows)
            {
                TreeNode n = new TreeNode();
                n.Name = row["M_GUID"].ToString();
                n.Text = row["NameText"].ToString();
                //n.Tag = row["Code"].ToString();
                node.Nodes.Add(n);
                AddTreeNode(n);
            }
        }


第二次修改:将查询语句返回的列由所有(*)改为要用到两列(M_GUID,NameText)
        //递归添加子节点
        public static void AddTreeNode(TreeNode node)
        {
            //node.Name = GUID;
            DataTable table = PublicTools.AccessHelper.ExecuteDataTable("select M_GUID,NameText from FamilyTree where P_GUID = @P_GUID AND Generation > 1", new OleDbParameter("@P_GUID", node.Name));
            foreach (DataRow row in table.Rows)
            {
                TreeNode n = new TreeNode();
                n.Name = row["M_GUID"].ToString();
                n.Text = row["NameText"].ToString();
                //n.Tag = row["Code"].ToString();
                node.Nodes.Add(n);
                AddTreeNode(n);
            }
        }

本类排行

今日推荐

热门手游