高效收集对象列表

本文关键字:列表 对象 高效 | 更新日期: 2023-09-27 18:34:22

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

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

高效收集对象列表

好吧,使用 LINQ 它读起来更直观:

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

不过,我不确定它是更快还是更有效。

我想说的是,对于小列表,这实际上是某种过度优化,至于短列表,foreachfor,上述方法根本不应该有什么不同。因此,与其优化它,不如首先检查它是否强加了运行时问题。

我看到两种可能的"常规"优化情况,要么在数据库级别,要么在模型级别,具体取决于资源占用者的位置。

如果您可以通过数据库级别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);
             });

鉴于未知的要求,我不可能给出更可靠的建议。但是您的实现中没有任何一般的"错误"。

我喜欢参考这篇文章,所以我现在再次这样做。值得一读(即单击此行/句子中的某处,这是一个链接)。