簡體   English   中英

如何更快地優化以下代碼?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM