用户注意到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,并可能导致索引错误)。