簡體   English   中英

C#LINQ性能,如何避免它?

[英]C# LINQ Performance, How can I avoid It?

我有scheduler.PageResults這段代碼,其中包含數百萬行。

var  AllNonHTMLPages = scheduler.PageResults
                         .Where(p => (p.SkipReason & SkipReasonEnum.NoHTML) == SkipReasonEnum.NoHTML);
Console.WriteLine("# All Non HTML Pages: {0}", AllNonHTMLPages.Count());
foreach (PageData page in AllNonHTMLPages) { Console.WriteLine("Non HTML Page: {0}", page.Url); }

foreach (PageData page in scheduler.PageResults
        .Where(p => p.SkipReason.IsFlagSet(SkipReasonEnum.None))
        .OrderByDescending(p => p.IndexPath.Length))
{
   .....
}

羅斯林貢獻代碼表明

  • 避免使用LINQ。
  • 避免在編譯器熱路徑中分配:
  • 避免對沒有結構枚舉器的集合使用foreach。 考慮使用對象池。 編譯器中有許多對象池用法,以查看示例。

我知道LINQ很慢。 不使用Linq API進行優化的一些想法?

我發現,當使用Linq並遍歷大對象集(> 5000)時,當行中有很多數據/列時,速度很慢。 因此,如果您有權訪問數據庫並可以在該數據庫中進行操作,則性能將提高幾個數量級。 我也從來沒有實現過它(寫過TSQL),但是,您可以購買/獲取包以在對象的內存索引中構建內容以加快處理速度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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