【发布时间】:2018-02-24 08:01:22
【问题描述】:
如何提高性能(大约需要 10 秒)这个 foreach 循环
foreach (var item in pList)
{
var foundedItem = source.FirstOrDefault(x => x.LongRecordId == item.LongRecordId);
if (foundedItem != null && !selectionList.Contains(foundedItem))
{
foundedItem.Readonly = pReadonly;
selectionList.Add(foundedItem);
}
}
【问题讨论】:
-
提高性能并非易事。但也许您可以尝试为您的
item使用实际类而不是var。 -
使用 for 循环代替。
-
问题可能出在您的
selectionList.Contains(foundedItem)上。我不知道您的项目有多复杂,以及您在该列表中存储了多少项目。但你可能想试试Dictionary。 -
瓶颈可能是
source上的LINQ。与source相比,pList中的项目数的典型关系是什么?将任一预计算到字典中可以是一种方法。进行一些分析以真正找出答案(假设您的意思是包括循环体代码在内的性能,而不仅仅是pList迭代器的性能,您没有显示) -
正是我所说的。