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))'填充列表如果幾乎空閒,您將不會獲得任何試圖並行執行的操作 –