LINQ to Objects - 在IEnumerable <string>上使用ToArray/ToList的任何性能优势

Joh*_*lly 0 linq ienumerable linq-to-objects tolist toarray

这几乎无疑是一个愚蠢的问题.在我的辩护中我生病了.无论如何.

我有一个内存列表中的对象.我使用下面的表达式从我的对象列表中提取出我感兴趣的字符串:

var myStrings = myListOfObjects.Select(r => r.MyString);
Run Code Online (Sandbox Code Playgroud)

这为我提供了一个IEnumerable字符串.myStrings稍后会在我的代码中重复使用多次.我想知道的是,在使用它之前执行ToArray或ToList(即"贪婪"运算符)是否有任何性能优势?(所以我的操作将直接针对数组/列表.)

对于它的价值,myStrings在使用时将被完整地重复使用.

SLa*_*aks 5

这是速度与空间的权衡.

如果你的Select()回调计算量很大,你可能想要计算一次并存储它以备日后使用.

如果没有,您可能希望节省存储空间并每次都进行计算.

如果你需要随机访问,你一定要打电话ToList(),因为ElementAt()是O(n).

请注意,ToList()速度快于ToArray(),因为ToArray()需要在完成后修剪数组.