【问题标题】:Iterate through dataview slow performance遍历dataview性能慢
【发布时间】:2018-01-07 08:11:21
【问题描述】:

我有一个包含类似行的数据表

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 列)。

下面的代码运行良好,但速度很慢。 遍历 200,000 行需要 15 分钟。有没有办法提高性能?

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
      }
}

【问题讨论】:

    标签: c# datatable dataview


    【解决方案1】:

    您可以使用 LINQ 按 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
        }
    }
    

    【讨论】:

    • 谢谢!现在跑得更快了。
    猜你喜欢
    • 2013-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    • 1970-01-01
    • 2013-11-16
    • 2011-02-08
    • 2014-03-08
    相关资源
    最近更新 更多