0
我有下面这段代码如何加快在C#中使用填充TPL(任务并行库)列表
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来加速使用TPL的网格数据源群体,并将vm添加到_itemSource的主集合。
如何实现如此使用TPL。考虑到事实线程开销和锁定开销,它是否真的会加快我的工作速度?我可以将当前列表项源代码转换为ConcurrentList或ConcurrntBag。但同样的问题: - 它真的会给予任何提升或没有。如果没有,那么我有兴趣知道为什么?
列表不是线程安全的,你从tpl中获得任何东西 –
@RoyiNamir如果我使用ConcurrentList,该怎么办。考虑到线程和锁定开销,它能让我以任何方式提升性能 –
您可以使用PLinq并行地调用构造函数(不确定你在内部做了些什么,以便花费那么多时间,但除此之外,这就是:'Network .Shelves.SelectMany(s => s.Equipment).AsParallel()。选择(e => new GridVM(e))'填充列表如果几乎空闲,您将不会获得任何试图并行执行的操作 –