2017-10-12 4 views
-1
For Each drow As DataGridViewRow In DgvItemList.Rows 
      drow.Cells("strSrNo").Value = drow.Index + 1 
     Next 

DgvItemListに3500を超えるレコードがあります。私はそのレコードに番号を付けるだけですが、それは9〜10分です。vbでループが約10分かかる

この時間を短縮するにはどうすればよいですか?

+0

https://stackoverflow.com/questions/5817632/beginupdate-endupdate-for-datagridview-request、maybe? WindowsのメッセージはWindows固有のものです。 – Ryan

+0

これを行う方法? – Bhoomi

+0

実際に何をしようとしていますか?次のように:*なぜ*グリッド内のデータに何らかのシリアル番号のようなものを割り当てる必要がありますか?編集:また、あなたのグリッドは、DataTableまたは何かにバインドされていますか? –

答えて

2

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 

まずはサスペンドとレジュームのレイアウトで試してください。あなたは、並列化から膨大な量の改善を得ることはできません。しかし、行く価値がある。

+0

Parallelの条件を終了しないでください。行数から1を引いた値にしますか? – dwilliss

+0

私は 'Parallel.For'を一度も使用していませんが、通常のスレッド/タスクと同様に、UIにアクセスするときに呼び出す必要はありませんか? –

+0

@dwilliss no。人々を混乱させるだけで、通常のfor.nextループは0から100までは101回ループしますが、parallel.forループは0から99までしか実行しないので、最後の値から1を引く必要はありませんゼロベースのインデックスの場合。コインの反対側で、ループの最後がarray.getupperboundから取得された場合は、1 –

関連する問題