[英]How can I optimize the following code faster?
我有两个清单:
reports
计数 6000, invoices
计数 6000
我有这样的循环:
foreach (var item in reports)
{
item.SettlementProcessStatus =
invoices.Any(t => t.InvoiceId == item.RelatedInvoiceId)
? SettlementProcessStatus.Done
: SettlementProcessStatus.Error;
}
起初,这段代码速度还不错,但索引越高,速度就越慢。 建议使用哪些解决方案来优化它?
性能问题是您的代码必须至少部分迭代每个报告的invoices
。 为避免这种情况,首先创建一个包含所有发票 ID 的HashSet
,然后在其中搜索而不是在列表中搜索。
假设您有 integer ID,您可以这样做:
var invoiceIds = new HasSet<int>(invoices.Select(x => x.InvoiceId));
foreach (var item in reports)
item.SettlementProcessStatus = invoiceIds.Contains(item.RelatedInvoiceId) ?
SettlementProcessStatus.Done :
SettlementProcessStatus.Error;
不要使用发票列表,而是使用将 RelatedInvoiceId 作为其键值的字典。
这避免了遍历每个项目的所有列表项。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.