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

时间:2015-09-09 05:44:18

标签: c# performance linq

我的代码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 Contributing Code表示

  • 避免使用LINQ。
  • 避免在编译器热路径中进行分配:
  • 避免在没有结构枚举器的集合上使用foreach。 考虑使用对象池。编译器中有许多对象池可用于查看示例。

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

1 个答案:

答案 0 :(得分:0)

我发现当使用Linq并在行中有大量数据/列时循环遍历大型对象集(> 5000)时,它只是很慢。因此,如果您可以访问数据库并且可以在那里执行,那么您将获得更快的性能。另外我从来没有实现它(写过TSQL)但是,你可以购买/获取包来构建对象的内存索引以加快速度。