[英]how to speed up populating a list using TPL(task parallel library) in c#
我有以下代码
List<GridVM> _itemsSource = new List<GridVM>();
foreach(var shelf in Network.Shelves)
{
foreach(var equipment in shelf.Equipment)
{
var gridVM= new GridVM(equipment);
itemSource.Add(gridVM);
}
}
_itemSource是一个集合,它将成为网格的数据源。
现在为每个设备创建每个vm对象大约需要8秒钟的时间。 我想通过在不同线程中运行内部forloop并将vm添加到_itemSource的主集合中,从而使用TPL加快网格数据源的填充。
如何使用TPL实现。 考虑到线程开销和锁定开销的事实,是否真的可以加快我的工作速度? 我可以将当前列表项源转换为ConcurrentList或ConcurrntBag。 但同样的问题:-真的会有所助益吗? 如果没有,那么我很想知道为什么?
您可以使用PLINQ(又名Parallel Linq)轻松并行化代码:
var _itemsSource = Network.Shelves
.SelectMany(s => s.Equipment)
.AsParallel()
.Select(e => new GridVM(e))
.ToList();
如果构造函数需要一些时间,它可能会执行得更快。 如果开销仅仅是“将项目添加到列表”,那么您将一无所获。 也就是说,如果仅将项目添加到列表需要8秒钟,那么您肯定还有其他问题,例如内存消耗。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.