アプリ版:「スタンプのみでお礼する」機能のリリースについて

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秒程度掛ります。
 これを高速化したいと考えているのですが、何か良い手はないでしょうか?

A 回答 (1件)

データバインドしていませんか?



BindingSource のバインドを止める → SuspendBinding / ResumeBinding
コントロールの表示を止める → SuspendLayout/ResumeLayout
    • good
    • 1
この回答へのお礼

ありがとうございます。
SuspendBindingは気になっていたので、それ自体は止めていました。
私の質問にも問題があったのですが、上位でDataGridViewによる表示をおこなっておりました。
その結果、dataTableを変更することで、DataGridView側の表示フォーマットを変更するロジックが走ってしまっていたようです。
そういう意味では、SuspendLayoutを実施して表示を止めるようしてみたのですが、あまり効果は得られませんでした。
方向性として正しいと判断し、原因を追及したところ、Dataが更新されるたびに、DataGridView側のセルの各縦横幅を調整しに行っていたようです。

AutoSizeColumsModeおよびAutoSizeRowsModeがAllCellsになっていたことが原因でした。
これらの設定を、Noneにすると格段に速くなったのですが、表示状態が以前(AllCells)の時と比べ、異なってしまいました。
そこで、DisplayedCellsにすることで、表示上も支障なく速度の向上を得られることに成功しました。

方向性を与えて頂いてありがとう御座います。

お礼日時:2012/02/17 19:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています