DataTable.Rows.Add()时间与DataTable大小成比例增长

时间:2016-01-15 17:12:09

标签: c# performance datagridview datatable system.data.datatable

用户注意到DataGridView中的记录开始出现在屏幕上有一些延迟。

所以我分析了日志,发现在调用DataTable.Rows.Add()的时间与数据表中的记录数量之间存在很强的依赖关系。 如果在开始时它花费的时间少于0.01毫秒,当表中有大约10000条记录时,它会增长到1毫秒,当50000条记录时,它会增加到5毫秒。 有两个线程:一个添加记录,另一个删除。 DataTable与DataGridView绑定,这意味着每次DataTable行集合更改时它都会自动更新gridview。

我的理解是,对于表中100000等记录的金额,不应该有这样的延迟。 我应该考虑为DataGridView实现VirtualMode吗?我注意到VirtualMode属性设置为true,但未处理CellValueNeeded事件。

代码如下所示:

var row = table.NewRow();
//manipulations with row
table.Rows.Add(row);
row.AcceptChanges();

并删除:

var row = table.Rows.Find(id);
if (row != null) {
    row.Delete();
    row.AcceptChanges();
}

1 个答案:

答案 0 :(得分:0)

是的,您必须考虑取消绑定您的DataTable和DataGridView并使用VirtualMode(VirtualMode不能应用绑定的DataSource)。 您必须在CellValueNeeded事件中手动绑定DataTable (请注意同步,因为每次都可以处理CellValueNeeded并导致索引错误。)