2017-10-12 49 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 –

相关问题