Lia*_*iam 5 c# linq performance ienumerable tolist
给定内存(不是LINQ to SQL)类列表:
List<MyClass> myItems = /*lots and lots of items*/;
Run Code Online (Sandbox Code Playgroud)
我正在使用一个GroupBy()声明进行分组:
myItems.GroupBy(g => g.Ref)
Run Code Online (Sandbox Code Playgroud)
然后立即消费foreach循环是否有任何区别呼吁.ToList()"组"或我应该只使用IEnumerable.
完全代码示例:
ToList()List<List<MyClass>> groupedItemsA = new List<List<MyClass>>();
List<List<MyClass>> groupedItemsB = new List<List<MyClass>>();
List<MyClass> myItems = /*lots and lots of items*/;
List<IGrouping<string, MyClass>> groupedItems = myItems.GroupBy(g => g.Ref).ToList();
foreach(IGrouping<string, MyClass> item in groupedItems)
{
if (/*check something*/)
{
groupedItemsA.Add(item.ToList());
}
else
{
groupedItemsB.Add(item.ToList());
}
}
Run Code Online (Sandbox Code Playgroud)
要么
IEnumerableList<List<MyClass>> groupedItemsA = new List<List<MyClass>>();
List<List<MyClass>> groupedItemsB = new List<List<MyClass>>();
List<MyClass> myItems = /*lots and lots of items*/;
IEnumerable<IGrouping<string, MyClass>> groupedItems = myItems.GroupBy(g => g.Ref);
foreach(IGrouping<string, MyClass> item in groupedItems)
{
if (/*check something*/)
{
groupedItemsA.Add(item.ToList());
}
else
{
groupedItemsB.Add(item.ToList());
}
}
Run Code Online (Sandbox Code Playgroud)
这些"引擎盖"的执行计划有什么不同吗?这些中的任何一个会更有效还是不重要?
在此之后我没有使用该groupedItems列表.
是的,有区别,可能很重要.
ToList()将迭代并将每个迭代项追加到新列表中.这具有创建消耗内存的临时列表的效果.
有时你可能想要记忆惩罚,特别是如果你打算多次迭代列表并且原始列表不在内存中.
在您的特定示例中使用ToList()实际上最终迭代两次 - 一次构建列表,第二次在foreach中.根据列表的大小和您的应用程序,这可能是也可能不是一个问题.
| 归档时间: |
|
| 查看次数: |
3000 次 |
| 最近记录: |