※ ChatGPTを利用し、要約された質問です(原文:C# でDataTableの更新を高速化したい。)
C#でDataTableの更新を高速化!
このQ&Aのポイント
C#でDataTableの更新を高速化する方法を教えてください。
現在、dataTblには1000件程度のデータが保存されており、Select()で300件程度を検索している状況です。しかし、for文の中でのデータの変更が非常に遅く、約10秒かかってしまいます。
どのようにすれば更新処理を高速化できるのでしょうか?助言をお願いします。
dataTblには1000件程度のデータが保存されています。
Select()で300件程度を検索して、ヒットした対象のデータの一部を変更しています。
以下がサンプルコード(モディファイしてあります。)です。
DataRow[] hitRow;
hitRow = dataTbl.Select(str);
for (int i = 0; i < hitRow.Length; i++)
{
hitRow[i][5] = "ABC"; <=== ここが遅い!!
}
Select()は頻繁に行うわけでもなく、遅いとは思っていないのですが、for文の中身で非常に時間が掛ってしまいます。約10秒程度掛ります。
これを高速化したいと考えているのですが、何か良い手はないでしょうか?
お礼
ありがとうございます。 SuspendBindingは気になっていたので、それ自体は止めていました。 私の質問にも問題があったのですが、上位でDataGridViewによる表示をおこなっておりました。 その結果、dataTableを変更することで、DataGridView側の表示フォーマットを変更するロジックが走ってしまっていたようです。 そういう意味では、SuspendLayoutを実施して表示を止めるようしてみたのですが、あまり効果は得られませんでした。 方向性として正しいと判断し、原因を追及したところ、Dataが更新されるたびに、DataGridView側のセルの各縦横幅を調整しに行っていたようです。 AutoSizeColumsModeおよびAutoSizeRowsModeがAllCellsになっていたことが原因でした。 これらの設定を、Noneにすると格段に速くなったのですが、表示状態が以前(AllCells)の時と比べ、異なってしまいました。 そこで、DisplayedCellsにすることで、表示上も支障なく速度の向上を得られることに成功しました。 方向性を与えて頂いてありがとう御座います。