繁体   English   中英

如何在C#中使用TPL(任务并行库)加速填充列表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM