[英]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.