4

コードが渡されました。コードはC#で記述されており、リアルタイムデータを毎秒データベースに挿入します。データは時間とともに蓄積されるため、数値が大きくなります。

データは1秒以内に何度も更新され、2番目の結果の終わりに取得されて挿入されます。

以前は、プロパティを介して1秒以内にデータセット行を直接アドレス指定していました。たとえば、このような多くの操作'datavaluerow.meanvalue + = mean; 発生する可能性があります。内部キャストが行われたため、プロファイラーを実行した後、これがパフォーマンスを低下させていることがわかりました。そのため、更新が実行される2次元の小数配列を作成し、2番目の終わりにのみ値がデータ行に割り当てられました。プロファイラーを実行したところ、まだ多くの時間がかかっていることがわかりました(ただし、合計すると、データ行に頻繁にアクセスするのにかかる時間よりも短くなります)。

秒の終わりに実行されるコードは次のとおりです

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            
}

このアプローチをさらに改善する方法はありますか?

4

1 に答える 1

4

明らかな質問の1つ:整数のみで更新しているのに、なぜ小数の2D配列があるのですか?int[][]代わりに逃げてもらえますか?

次に、なぜ(int)table1Enum.barDateTime各反復でアクセスするのですか?そこに変換が含まれていることを考えると、ループからそれを抽出すると役立つ場合があります

ただし、時間の大部分はに費やされると思い_table1Values[i].Cast<object>().ToArray()ます。あなたは本当にそれをする必要がありますか?decimal[](または)のコピーを取得するint[]方が、すべての呼び出しのすべての反復ですべての値をボックス化してから、別の配列を作成するよりも高速です。

于 2010-06-27T08:53:45.963 に答える