[原]DataTable性能问题

      这段时间在做一个数据分析的工具,需要计算和过滤大量数据。

      考虑到DataTable提供的强大功能和灵活性,数据的处理大都在DataTable中进行处理。
 
      但近段时间测试中,发现了性能的缺陷问题。于是,就开始研究性能的提高问题。

      我先给初步推测:现有模式下,程序即时优化,优化的幅度不会太大,除非改变现有的操作模式。

      于是首先,从其中一个过程是先从CSV文件读取原始数据的地方着手。一直采用Stream(流)的读取方式,怀疑是不是这里成为性能的瓶颈。于是改用ODBC:Microsoft Text Driver的方式:这样就可以像操作数据库一样来操作CSV里的数据了,通过sql语句来获取数据。但是,通过比较这两种方式后,得出的结论是:因为业务上的需要,对数据进行多次分组合并,反而用sql语句实现效率不如Stream方式,而且没有自己来操作灵活,受限于sql语句。<这里是应该写得详细些,以后注意>

      于是,否定了前面的这种推测;那影响性能的真正原因是什么呢?

      接下来,就一行行代码进行浏览,终于确定影响性能的位置,是出项在两层循环出现的位置:
 for (int j = 0; j < intSpacingValueNum; j++)
{
  for (int i = 1; i < aryline.Length; i++)
  {
    dtAll[intCSVRowCountTemp, i] += Convert.ToDecimal(aryline[i]);
      //DataTable和二维数组的差异,是每次指定“行号、列号”,取相应元素有一点差异,然而在多次的循环操作中被放大了;这可能和DataTable和二维数组自身的结构有关,没做深究
  }   
 }
      问题就出在循环里的这条语句, 因为i和j的取值很大,当i=50000,j=200,循环里面的这句就要操作1000000遍;所以性能上的丝毫差别,都会被无限放大;于是尝试,用数组来替代:
decAll[intCSVRowCountTemp, i] += Convert.ToDecimal(aryline[i]);性能立刻提高了十倍,之前用20-30秒,现在2-3秒就处理完毕。

      结论:功能和性能永远是一对矛盾体,DataTabel功能强大必然要性能差些;数组结构则反之。
      我想大家平时DataTable一定没少用,希望能给大家提个醒,其实各种数据结构都有其最佳用途,要根据需要有针对性地进行选择。       

转载于:https://www.cnblogs.com/zzc315/archive/2007/07/19/824280.html

  • 0
    点赞
  • 0
    收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值