我有兩個清單:
reports數 6000
invoices和數 6000
我有這樣的回圈:
foreach (var item in reports)
{
item.SettlementProcessStatus =
invoices.Any(t => t.InvoiceId == item.RelatedInvoiceId)
? SettlementProcessStatus.Done
: SettlementProcessStatus.Error;
}
一開始,這段代碼速度還不錯,但是索引越高,速度越慢。推薦什么解決方案來優化它?
uj5u.com熱心網友回復:
invoices性能問題是您的代碼必須為每個報告至少部分迭代。為避免這種情況,首先HashSet使用您的所有發票 ID 創建一個,然后在其中搜索而不是您的串列。
假設您有整數 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;
uj5u.com熱心網友回復:
不要使用發票串列,而是使用以RelatedInvoiceId 作為其鍵值的字典。
這避免了遍歷每個專案的所有串列項。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/438264.html
