我有一个
System.Data.DataTable
,大约有 2400 行。我想删除其中三个,但删除需要很长时间 - 调用 Delete()
大约需要 5 秒,而
AcceptChanges()
又需要 1.5 秒。
var dataTable = _dataSetDataGridView.Tables[tableInfo.Id];
var rowsToDelete = dataTable.Rows
.Cast<DataRow>()
.Where(row => keys.Select(v => Regex.Replace(v, @"^'|'$", "")).Contains(row[id].ToString()));
try
{
foreach (var row in rowsToDelete)
row.Delete();
dataTable.AcceptChanges();
}
我可以做些什么来加快这个片段的速度吗?肯定是出了什么问题——不可能花那么长时间——可以吗?罪魁祸首也不是 LINQ 表达式,因为尾随的 ToList()
会立即返回。
DataTable
。但即使将集合转换为
List<DataRow>
并在其上迭代 for-loop
也不会改变任何东西。@panagiotis-kanavos:这是一个 WinForms 应用程序。 _dataSetDataGridView
是数据网格中呈现的多个表的
DataSet
。我已经尝试在 datagridview 上调用 SuspendLayout()
但无济于事。一点背景信息:我们的用户可以非常轻松地在许多表格之间进行更改。一些复杂的查询需要几秒钟的时间才能返回数据,因此我们只想加载该数据一次并将其缓存在 DataSet 中。当然,这个缓存可能并不总是显示实际数据,但这是我们和我们的用户正在接受的权衡。但是当用户删除数据时,她当然不想再看到它了。从数据库中删除数据的过程是单独完成的,并且按预期需要几毫秒 - 这只是我们在这里看到的数据的呈现。