c# LINQ性能,我如何避免它

本文关键字:何避免 LINQ 性能 | 更新日期: 2023-09-27 18:11:54

我的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))
{
   .....
}

Roslyn贡献代码指示

  • 避免LINQ。
  • 避免在编译器热路径中分配:
  • 避免在没有结构枚举数的集合上使用foreach。考虑使用对象池。在编译器中有很多对象池的用法,请查看示例。

我知道LINQ很慢。没有Linq API优化的一些想法?

c# LINQ性能,我如何避免它

我发现,当使用Linq并在大型对象集(>5000)上循环时,在行中有很多数据/列,它只是很慢。所以,如果你可以访问数据库并且可以在那里操作,你将获得数量级的性能提升。我也从来没有实现过它(写过TSQL),但是,你可以购买/获得包来构建对象的内存索引,以加快速度。