如何进一步优化此代码?

时间:2010-06-27 08:43:50

标签: c# performance variable-assignment datarow

我刚收到一封代码交给我。代码用C#编写,每秒将实时数据插入数据库。数据会及时累积,使数字变大。

数据在第二次内更新,然后在第二次结果结束时插入并插入。

我们曾经通过属性直接在第二行内处理数据集行。例如,像这样的许多操作'datavaluerow.meanvalue + = mean;可能会发生。 我们发现在运行探测器之后这会降低性能,因为内部转换已经完成,所以我们创建了2d小数组,在其上执行更新,然后仅在第二个末尾将值分配给数据行。 我运行了一个分析器,发现它仍然需要花费很多时间(尽管少于在添加时经常访问数据行的时间)。

在第二秒结束时执行的代码如下

public void UpdateDataRows(int tick)
{
  //ord
  //_table1Values is of type decimal[][]
  for (int i = 0; i < _table1Values.Length; i++)
  {
    _table1Values[i][(int)table1Enum.barDateTime] = tick;
    table1Row[i].ItemArray = _table1Values[i].Cast<object>().ToArray();

  }
  // this process is done for other 10 tables            
}

有没有办法进一步改进这种方法。

1 个答案:

答案 0 :(得分:4)

一个显而易见的问题:当你只用整数更新它们时,为什么你有一个二维小数组?您可以改为使用int[][]吗?

接下来,为什么要在每次迭代中访问(int)table1Enum.barDateTime?鉴于此处涉及转换,如果您将其从循环中提取出来,可能会发现它有用。

但是,我怀疑大部分时间都花在_table1Values[i].Cast<object>().ToArray()上。你真的需要这样做吗?获取decimal[](或int[])的副本比在每次调用的每次迭代中装箱每个值更快 - 然后创建另一个数组。