1

C# DataRow["haswhatnots"] = hasWhatnots への値の代入は非常に遅いです。hasWhatnots はブール値です。

この行のプロファイリングを行ったところ、560000 ヒットで実行時間は 82 秒になりました。もちろん、プロファイラーはパフォーマンスに何らかの影響を与えますが、それでもパフォーマンスは非常に遅いです!

問題に関するヒント。DataRow は、DataGridView.Datasource にバインドされている BindingSource にバインドされている DataTable の一部です。

4

3 に答える 3

2

(編集: データ バインディングを行っていることを確認しただけです) 最初に試すことは、データ バインディングを無効にすることです。おそらくソースを null に設定し、後で再バインドします。BindingSourceがありSuspendBinding()、このためです。ResumeBinding()ResetBindings()


本当の問題がルックアップだけである場合は、 のスナップを取り、次DataColumnを使用できます。

// early code, once only...
DataColumn col = table.Columns["haswhatnots"];

// "real" code, perhaps in a loop
row[col] = hasWhatnots;

これが最速のルートであることを思い出すようです (文字列オーバーロードDataColumnはリストから を見つけます)。

別の方法 - ;-pclassの代わりにモデルを使用するDataTable

于 2009-11-13T12:57:56.253 に答える
0

あなたはこれを試すことができます

bindingSource1.RaiseListChangedEvents = false;

// stuff the grid

bindingSource1.RaiseListChangedEvents = true;

そして、それが違いを生むかどうかを確認してください。

于 2009-11-13T13:55:47.493 に答える
0

非常に遅いですが、まだ同じ問題がありました

DataRow row

row.BeginEdit();
row["haswhatnots"] = hasWhatnots;
row.EndEdit();

(私のスケールでは)大きなグリッド(60列、10k以上の行)で発生する極端な遅延があり、これによりCPU時間が以前の1パーセント未満に短縮されました.

于 2017-01-30T15:24:42.950 に答える