C#中ForEach循环的性能改进技巧?

时间:2015-08-05 10:53:17

标签: c# performance optimization

我需要优化以下foreach循环。 foreach循环需要更多时间才能获得唯一的项目。

  1. 而是可以将FilterItems转换为列表集合。如果是这样的话怎么做。然后我将轻松地从中获取独特的物品。

  2. 当我在FilterItems中有5,00,000个项目时会出现问题。

  3. 请提供一些方法来优化以下代码:

    int i = 0; 
    List<object> order = new List<object>();
    List<object> unique = new List<object>();
    // FilterItems IS A COLLECTION OF RECORDS. CAN THIS BE CONVERTED TO A LIST COLLECTION DIRECTLY, SO THAT I CAN TAKE THE UNIQUE ITEMS FROM IT.
    foreach (Record rec in FilterItems)
    {
      string text = rec.GetValue(“Column Name”);
      int position = order.BinarySearch(text);
      if (position < 0)
      {
        order.Insert(-position - 1, text);
        unique.Add(text);
      }
      i++;
    }
    

1 个答案:

答案 0 :(得分:2)

当我们对它没有任何了解时,将“将FilterItems转换为列表”的含义还不清楚,但你可以考虑在之后对进行排序,你已经获得了所有项目,而不是当你走的时候:

var strings = FilterItems.Select(record => record.GetValue("Column Name"))
                         .Distinct()
                         .OrderBy(x => x)
                         .ToList();

在这里使用Distinct()将避免对大量相同的项目进行排序 - 看起来你只想要不同的项目。

如果您希望unique符合原始订单但order为相同的商品,只需排序,您可以使用:

var unique = FilterItems.Select(record => record.GetValue("Column Name"))
                        .Distinct()
                        .ToList();
var order = unique.OrderBy(x => x).ToList();

现在Distinct()无法保证保留顺序 - 但它在当前实现中也是如此,而且这也是自然实现最多的。