从数据表中删除行需要非常长的时间

问题描述 投票:0回答:1

我有一个

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() 会立即返回。

关于评论:@itsme86:这就是我将要删除的行提取到额外集合中的原因。我不会迭代原始的

DataTable

。但即使将集合转换为

List<DataRow>
并在其上迭代
for-loop
也不会改变任何东西。
@panagiotis-kanavos:这是一个 WinForms 应用程序。 

_dataSetDataGridView

是数据网格中呈现的多个表的

DataSet
。我已经尝试在 datagridview 上调用
SuspendLayout()
但无济于事。
一点背景信息:我们的用户可以非常轻松地在许多表格之间进行更改。一些复杂的查询需要几秒钟的时间才能返回数据,因此我们只想加载该数据一次并将其缓存在 DataSet 中。当然,这个缓存

可能

并不总是显示实际数据,但这是我们和我们的用户正在接受的权衡。但是当用户删除数据时,她当然不想再看到它了。从数据库中删除数据的过程是单独完成的,并且按预期需要几毫秒 - 这只是我们在这里看到的数据的呈现。

c# datatable
1个回答
1
投票

© www.soinside.com 2019 - 2024. All rights reserved.