高效收集对象列表
本文关键字:列表 对象 高效 | 更新日期: 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();
不过,我不确定它是更快还是更有效。
我想说的是,对于小列表,这实际上是某种过度优化,至于短列表,foreach
,for
,上述方法根本不应该有什么不同。因此,与其优化它,不如首先检查它是否强加了运行时问题。
我看到两种可能的"常规"优化情况,要么在数据库级别,要么在模型级别,具体取决于资源占用者的位置。
如果您可以通过数据库级别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);
});
鉴于未知的要求,我不可能给出更可靠的建议。但是您的实现中没有任何一般的"错误"。
我喜欢参考这篇文章,所以我现在再次这样做。值得一读(即单击此行/句子中的某处,这是一个链接)。