繁体   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