我刚收到一封代码交给我。代码用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
}
有没有办法进一步改进这种方法。
答案 0 :(得分:4)
一个显而易见的问题:当你只用整数更新它们时,为什么你有一个二维小数组?您可以改为使用int[][]
吗?
接下来,为什么要在每次迭代中访问(int)table1Enum.barDateTime
?鉴于此处涉及转换,如果您将其从循环中提取出来,可能会发现它有用。
但是,我怀疑大部分时间都花在_table1Values[i].Cast<object>().ToArray()
上。你真的需要这样做吗?获取decimal[]
(或int[]
)的副本比在每次调用的每次迭代中装箱每个值更快 - 然后创建另一个数组。