C# 就地数据表修改,而不是使用;Defaultview.ToTable“;

C# 就地数据表修改,而不是使用;Defaultview.ToTable“;,c#,performance,datatable,C#,Performance,Datatable,我正在研究一种算法,它可以非常方便地使用数据表进行实现 作为算法的一部分,我使用以下方法按数据表的第一列对其进行排序: dt.DefaultView.Sort = dt.Columns[0].ColumnName + " ASC"; dt = dt.DefaultView.ToTable(); // This is the Evil line 问题是,dt.DefaultView.ToTable()是一个相对较重的操作内存和时间方面的问题(它占用了算法近60%的时间!),很快这个算法将不得不处

我正在研究一种算法,它可以非常方便地使用数据表进行实现

作为算法的一部分,我使用以下方法按数据表的第一列对其进行排序:

dt.DefaultView.Sort = dt.Columns[0].ColumnName + " ASC";
dt = dt.DefaultView.ToTable(); // This is the Evil line
问题是,
dt.DefaultView.ToTable()
是一个相对较重的操作内存和时间方面的问题(它占用了算法近60%的时间!),很快这个算法将不得不处理大量数据

我知道我可以手动排序,但我不想重新发明轮子

那么,有没有人知道一种方法可以在每次都不重新定位整个桌子的情况下完成这项工作,也不必重新设计轮子


更完整的代码示例:

var dt = new DataTable();
/*Populating dt...*/
for (int i = 0; i < input.Length; i++)
{
    /*Some more code here that includes modifying first column*/

    dt.DefaultView.Sort = dt.Columns[0].ColumnName + " ASC";
    dt = dt.DefaultView.ToTable();
}
var dt=new DataTable();
/*填充dt*/
for(int i=0;i
另一种方法是LINQ:
dt=dt.AsEnumerable().OrderBy(r=>r[0]).CopyToDataTable()
,但是
CopyToDataTable
还需要创建一个包含有序行的新表。你真的每次都需要一张新桌子吗?@TimSchmelter谢谢你的评论。如果没有解决核心问题的解决方案,我将测试您的报价,看看它是否能提高性能。