For Each drow As DataGridViewRow In DgvItemList.Rows
drow.Cells("strSrNo").Value = drow.Index + 1
Next
DgvItemListに3500を超えるレコードがあります。私はそのレコードに番号を付けるだけですが、それは9〜10分です。vbでループが約10分かかる
この時間を短縮するにはどうすればよいですか?
For Each drow As DataGridViewRow In DgvItemList.Rows
drow.Cells("strSrNo").Value = drow.Index + 1
Next
DgvItemListに3500を超えるレコードがあります。私はそのレコードに番号を付けるだけですが、それは9〜10分です。vbでループが約10分かかる
この時間を短縮するにはどうすればよいですか?
2つのもの。あなたが値を変更するたびに、それは、ちょうどあなたのループの前ので、DataGridViewの更新を引き起こす
DgvItemList.SuspendLayout
とループの後を追加し、あなたはまた、ループを変更することができ
DgvItemList.ResumeLayout
を追加することができますParallel.Forループでは、最終的なコードは次のようになります
DgvItemList.SuspendLayout
Parallel.For(0, DgvItemList.Rows.Count, Sub(index As Integer)
DgvItemList.Rows(index).Cells("strSrNo").Value = DgvItemList.Rows(index).Index + 1
End Sub)
DgvItemList.ResumeLayout
まずはサスペンドとレジュームのレイアウトで試してください。あなたは、並列化から膨大な量の改善を得ることはできません。しかし、行く価値がある。
Parallelの条件を終了しないでください。行数から1を引いた値にしますか? – dwilliss
私は 'Parallel.For'を一度も使用していませんが、通常のスレッド/タスクと同様に、UIにアクセスするときに呼び出す必要はありませんか? –
@dwilliss no。人々を混乱させるだけで、通常のfor.nextループは0から100までは101回ループしますが、parallel.forループは0から99までしか実行しないので、最後の値から1を引く必要はありませんゼロベースのインデックスの場合。コインの反対側で、ループの最後がarray.getupperboundから取得された場合は、1 –
https://stackoverflow.com/questions/5817632/beginupdate-endupdate-for-datagridview-request、maybe? WindowsのメッセージはWindows固有のものです。 – Ryan
これを行う方法? – Bhoomi
実際に何をしようとしていますか?次のように:*なぜ*グリッド内のデータに何らかのシリアル番号のようなものを割り当てる必要がありますか?編集:また、あなたのグリッドは、DataTableまたは何かにバインドされていますか? –