For Each drow As DataGridViewRow In DgvItemList.Rows
drow.Cells("strSrNo").Value = drow.Index + 1
Next
我在DgvItemList中有超過3500條記錄。我只是給這個記錄編號,但它爲此工具9到10分鐘。循環大約需要10分鐘vb
如何減少這段時間?
For Each drow As DataGridViewRow In DgvItemList.Rows
drow.Cells("strSrNo").Value = drow.Index + 1
Next
我在DgvItemList中有超過3500條記錄。我只是給這個記錄編號,但它爲此工具9到10分鐘。循環大約需要10分鐘vb
如何減少這段時間?
兩件事。每次更改值時,它可能會導致在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.For行計數減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,也許?不過,Windows消息使它成爲特定於Windows的消息。 – Ryan
該怎麼做? – Bhoomi
你究竟在做什麼?如下所示:*爲什麼*您需要將看起來像某種序列號的數據分配給已經在網格中的數據?編輯:另外,你的網格綁定到DataTable什麼的? –