【发布时间】:2023-03-19 11:15:01
【问题描述】:
代码:
Parallel.ForEach(
infoMap,
map =>
{
var workItem = map.WorkItem;
var parentInViews = viewMaps;
var workbenchItem = map.WorkbenchItem;
string LinkType = string.Empty;
WorkItemLinkCollection linkedWorkItems = workItem.WorkItemLinkHistory;
if (linkedWorkItems != null && linkedWorkItems.Count > 0)
LinkType = linkedWorkItems[0].LinkTypeEnd.LinkType.ReferenceName;
else if (workItem != null)
LinkType = workItem.Store.WorkItemLinkTypes.LinkTypeEnds["Parent"].LinkType.ReferenceName;
if (!string.IsNullOrEmpty(LinkType))
{
var viewMap = parentInViews.FirstOrDefault();
if (viewMap != null)
{
var linkName = LinkType;
var childType = viewMap.ChildType;
ILinkItem itm = Factory.BuildLinkItem(linkName, workbenchItem, workbenchItem);
lock (Addparents)
{
Addparents.Add(itm);
}
}
}
});
Factory.BuildLinkItem 定义:
public static ILinkItem BuildLinkItem(string linkName, IWorkbenchItem parent, IWorkbenchItem child)
{
return new LinkItem { LinkName = linkName ?? string.Empty, Child = child, Parent = parent };
}
全部存在658 items,执行上述Parallel.ForEach函数需要将近10秒。
是否可以减少执行时间,如果可以,请建议我一个解决方案。谢谢。
注意:除了Parallel.ForEach,如果有任何替代方法可以提高性能并减少执行时间,请提出。谢谢。
【问题讨论】:
-
您是否尝试过分析您的代码并查看花费的时间?
-
因为我没有安装权限,所以我没有配置代码。
-
你为什么要
Addparents.Add(itm)?为什么不使用.ToList()进行并行选择以将项目放入列表中? -
@Enigmativity 我猜是因为编写这种代码比将多个 Select() 和 Where() 与所有这些状态结合起来要简单得多。
-
@Enigmativity,如何将
Addparents.Add(itm);更改为parallel select with a .ToList()。谢谢。
标签: c# .net performance parallel.foreach