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

我在DgvItemList中有超過3500條記錄。我只是給這個記錄編號,但它爲此工具9到10分鐘。循環大約需要10分鐘vb

如何減少這段時間?

+0

https://stackoverflow.com/questions/5817632/beginupdate-endupdate-for-datagridview-request,也許?不過,Windows消息使它成爲特定於Windows的消息。 – Ryan

+0

該怎麼做? – Bhoomi

+0

你究竟在做什麼?如下所示:*爲什麼*您需要將看起來像某種序列號的數據分配給已經在網格中的數據?編輯:另外,你的網格綁定到DataTable什麼的? –

回答

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.For行計數減1的條件? – dwilliss

+0

我從來沒有使用'Parallel.For',但是它不需要在訪問UI時調用,就像使用普通線程/任務一樣? –

+0

@dwilliss no。只是混淆了人們,一個常規的for.next循環說從0到100會循環101次,但一個parallel.for循環只會從0到99執行,所以你不需要從最終值減去1基於零的索引的情況。另一方面,如果你的循環的結束是從array.getupperbound獲得的,你可能需要添加1 –

相關問題