有效地收集对象列表

时间:2014-12-15 07:52:09

标签: c# list

List<MyClass> options = new List<MyClass>();
foreach (MyClass entity in ExistingList) {
    if (entity.IsCoolEnough) {
        options.Add(entity);
    }
}

我只是好奇最快,最有效的方法是什么。这个列表并不是很大,但它经常运行,所以我想让它保持活泼。我也不是在寻找冗长的变化。我只想尽可能快地运行。

2 个答案:

答案 0 :(得分:7)

好吧,使用LINQ,它更直观地读取:

var options = (from e in ExistingList where e.IsCoolEnough select e).ToList();

我不确定它是否更快或更有效率。

我说对于小型列表,这实际上是某种过度优化,对于短列表,foreachfor并且上述方法不应该完全不同。因此,不要优化它,首先检查它是否会产生运行时问题。

答案 1 :(得分:0)

我看到两种可能的“一般”优化案例,无论是在数据库级还是模型级,取决于资源占用的位置。

如果您可以通过db-level中的IsCoolEnough上的位置进行选择:

var result = ExistingList.Where(e => e.IsCoolEnough) // still in db?
                         .ToList(); // enumerate

如果你不能而且昂贵的操作是IsCoolEnough

var result = new ConcurrentBag<MyClass>(); // Thread safe but unordered.
Parallel.ForEach(ExistingList, current =>
             {
               if (current.IsCoolEnough) result.Add(current);
             });

鉴于非常未知的要求,我不可能提供更可靠的建议。但是在实现中没有任何一般的“错误”。

I like referring to this article, so I'm doing that again now. It's worth the read (Ie click somewhere on/in this line/sentence, it's a link).