博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用递归读取数据库(*.MDB)生成树节点(TreeNode)
阅读量:7114 次
发布时间:2019-06-28

本文共 1808 字,大约阅读时间需要 6 分钟。

  hot3.png

加载数据库记录生成树节点(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);
            }
        }

转载于:https://my.oschina.net/zsdc/blog/470105

你可能感兴趣的文章
leetcode shell
查看>>
JavaScript的第一次小结
查看>>
Google Maps 如何接地气地本地化 “两轮车模式” ?
查看>>
转-Java基础全面解析——Java语言基础
查看>>
模糊查询json数组
查看>>
8.使用下拉列表框进行多选
查看>>
不安装执行apk的方法(参考地址)
查看>>
oracle中的递归查询(start with/connect by)
查看>>
Xenserver命令大全
查看>>
随堂练习_电梯
查看>>
自动化测试基础篇--Selenium cookie操作
查看>>
再思linux内核在中断路径内不能睡眠/调度的原因(2010)【转】
查看>>
TCP/UDP区别&&心跳包机制【转】
查看>>
通信协议中的转义字符【转】
查看>>
input 上报流程图
查看>>
cppcheck代码检测
查看>>
vs 2010 sn 序列号
查看>>
js获取下拉框的value值
查看>>
LeetCode OJ:Permutations(排列)
查看>>
云科技时代:阿里云创造者写了《在线》,这是一本怎样的书?
查看>>