通过dataview迭代缓慢的性能

时间:2017-07-31 16:42:01

标签: c# datatable dataview

我有一个包含

等行的数据表

123,1,ABC,2,21.50,36.33

123,1,ABC,2,22.67,0.00

456,1,ABC,2,101.02,53.92

456,1,ABC,2,0.00,0.00 ...

我想遍历数据表并处理每个ID(第1列)。

下面的代码运行正常,但速度非常慢。 花了15分钟迭代200,000行。有没有办法提高性能?

if (dt.Rows.Count > 0)
{
   DataView distinctDv = new DataView(dt);
   DataTable distinctDt = distinctDv.ToTable(true, "ID");

   foreach (DataRow distinctRow in distinctDt.Rows)
   {
      DataView dv = DataView(dt);
      dv.RowFilter = "ID = " + distinctRow["ID"];

      foreach (DataRowView drv in dv)
      {
         //Logic
      }
}

1 个答案:

答案 0 :(得分:1)

您可以使用LINQ按ID对行进行分组,ID应该只循环一次DataTable,而不是RowFilter解决方案可能执行的每个键的一次(原谅我的C#,我已经在VB中) .NET搁置太久了!):

var grouped = (
    from row in dt.AsEnumerable()
    group row by row.Field<int>("ID") into g
    select g
);

foreach (var grp in grouped)
{
    Console.WriteLine("ID = {0}", grp.Key);
    foreach (var row in grp)
    {
        // Logic - row will be the DataRow
    }
}