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



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

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

我的理解是,在表中像 100000 这样的记录金额上,不应该有任何这样的延迟。我应该考虑为 DataGridView 实现 VirtualMode 吗?我注意到 VirtualMode 属性设置为 true,但未处理 CellValueNeed(单元格值)所需事件。

代码如下所示:

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();
}

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

相关内容

  • 没有找到相关文章

最新更新