遍历DataTable内存数据的三种方法性能对比
2016-05-23 12:32
387 查看
前几年曾经碰到一个生成递归树形菜单的功能,由于系统比较庞大,有300-400个菜单项,把这些菜单一次性递归加载,的确需要耗费一些时间。
当然若是动态加载什么的,那就不会有太多麻烦了,加载这么多菜单时,不同的解决方法的确差别很大。
第一种写法,每次循环遍历表,这应该是最普通的做法,结果运行速度比较慢,效果有些难以忍受。
for (int i = dataTable.Rows.Count - 1; i >= 0; i--)
{
DataRow dataRow = dataTable.Rows[i];
?? = dataRow[fieldParentID].ToString();
}
第二种写法,采用 foreach 的遍历方法,效果几乎与第一个没什么本质的差别,最终效果还是有些难以忍受。
foreach (DataRow dataRow in dataTable.Rows)
{
?? = dataRow[fieldParentID].ToString();
}
第三种写法,想了几天,尝试了另外一种方法,用 dataTable.Select 方法,效果非常良好,运行速度,比前2个快很多很多,有明显的差距。
先把需要的数据Select 出来,然后再循环遍历获得的dataRows结果,虽然我没做过具体的数据,但是的确有很明显的体会。
DataRow[] dataRows = null;
dataRows = dataTable.Select(fieldParentID + "='" + treeNode.Tag.ToString() + "'", dataTable.DefaultView.Sort);
foreach (DataRow dataRow in dataRows)
{
DataRow dataRow = dataTable.Rows[i];
?? = dataRow[fieldParentID].ToString();
}
当然若是动态加载什么的,那就不会有太多麻烦了,加载这么多菜单时,不同的解决方法的确差别很大。
第一种写法,每次循环遍历表,这应该是最普通的做法,结果运行速度比较慢,效果有些难以忍受。
for (int i = dataTable.Rows.Count - 1; i >= 0; i--)
{
DataRow dataRow = dataTable.Rows[i];
?? = dataRow[fieldParentID].ToString();
}
第二种写法,采用 foreach 的遍历方法,效果几乎与第一个没什么本质的差别,最终效果还是有些难以忍受。
foreach (DataRow dataRow in dataTable.Rows)
{
?? = dataRow[fieldParentID].ToString();
}
第三种写法,想了几天,尝试了另外一种方法,用 dataTable.Select 方法,效果非常良好,运行速度,比前2个快很多很多,有明显的差距。
先把需要的数据Select 出来,然后再循环遍历获得的dataRows结果,虽然我没做过具体的数据,但是的确有很明显的体会。
DataRow[] dataRows = null;
dataRows = dataTable.Select(fieldParentID + "='" + treeNode.Tag.ToString() + "'", dataTable.DefaultView.Sort);
foreach (DataRow dataRow in dataRows)
{
DataRow dataRow = dataTable.Rows[i];
?? = dataRow[fieldParentID].ToString();
}
相关文章推荐
- Java - 蓝桥杯 - 历届试题 核桃的数量
- 制作自己的HUD
- 网络请求服务器之HTTP状态码
- DataTable在内存中的使用
- leetcode 之Implement strStr()(27)
- GNU C的__attribute__机制
- [从头学数学] 第217节 带着计算机去高考(九)
- Android动画
- Android设计模式之建造者模式——AlertDialog
- 三极管的工作原理(详细、通俗易懂、图文并茂)
- springmvc+jsonp 跨域访问
- WebSphere MQ Jms 连接
- Unity 对象池简单使用
- 统计-均值,期望,方差,协方差,协方差矩阵
- 安卓四大组件之Service
- 5月23日 注册审核
- ue4 蓝图
- Selenium WebDriver java小Demo
- EPC-6708 arm嵌入式文件系统、uboot、内核定制
- Lex Yacc (四) 实际应用全代码