在ToDictionary之前做ToList()会更好吗?

jot*_*bek 4 .net c# linq performance

是否值得在执行GroupBy()和ToDictionary()之前执行ToList()两次,如下例所示.在创建字典时,ToList()可以最大化性能吗?没有ToList(),Resharper正在大肆宣传可能的多重枚举.

public void SomeMethod(IEnumerable<oldItem> oldItems)
{
    var collection = oldItems.Select(i => new item()).ToList();
    var dict1 = collection.ToDictionary(i => i.Key);
    var dict2 = collection
         .GroupBy(i => i.FieldA)
         .ToDictionary(g => g.Key, g => new Flags(g.ToArray));
}
Run Code Online (Sandbox Code Playgroud)

Tim*_*ter 8

ToList之前做的更好ToDictionary吗?

不,Enumerable.ToDictionary无论如何都列举了所有项目,因此没有任何好处.相反的是,你需要在一个循环中无缘无故地填充另一个集合

ToDictionary如果我需要多个词典,之前做ToList()会更好吗?

大概.这取决于序列的类型.它可能是一个需要很长时间才能执行的数据库查询.没有ToList你会多次执行它.但它也可能是一个集合或非常便宜的查询.Resharper希望你考虑一下.

还有另一个与性能无关的细微差别.如果您不将序列存储在集合中(fe with ToList),则可能处于延迟执行上下文中(如果oldItems是数据库查询,则为fe ).这意味着无论何时执行此查询,您都将获得当前结果,该结果可能与先前执行的结果不同.这可能是你想要的,你只需记住这一点.

  • 这似乎是一个明确的答案.完全Resharper让我思考它:).谢谢 (2认同)