【问题标题】:linq orderby.tolist() performancelinq orderby.tolist() 性能
【发布时间】:2011-02-14 22:10:37
【问题描述】:

我有一个对列表的排序查询并多次调用。 list = list.OrderBy().ToList(); 在此代码中,ToList() 方法消耗大量资源并且需要很长时间。如何在不转换回列表的情况下使用另一种订购方法加快速度。我应该为数组使用 .Sort 扩展名吗?

【问题讨论】:

  • List<T> 有自己的Sort() 方法:msdn.microsoft.com/en-us/library/b0zbh7b6.aspx
  • 请注意,OrderBy 是延迟评估的,调用 ToList 会强制进行评估。要问的问题:您的OrderBy 是否在做任何昂贵的事情,例如进行方法调用?您的来源有多大?
  • 事实上,我有一门课,它有开始和结束日期,这个列表是为开始时间排序的。我可能会添加和删除这些对象一百万次(这是一个模拟)。添加对象时如何保持排序?我认为需要插入特定索引,所以我需要对每个添加进行过滤。也许这需要更多资源,我不确定......
  • @Baran 也许您想要SortedList<TKey, TValue>SortedSet 之类的东西?

标签: c# performance linq sql-order-by linq-to-objects


【解决方案1】:

首先,尝试对列表进行一次排序,并保持排序。

要加快速度,您可以使用 Parallel LINQ。

见:http://msdn.microsoft.com/en-us/magazine/cc163329.aspx

OrderBy() Parallel 看起来像这样:

 var query = data.AsParallel().Where(x => p(x)).Orderby(x => k(x)).ToList();

【讨论】:

  • 一次订购非常快,但一次又一次地调用它会变慢。我认为在这种情况下使用并行会使其更慢。不过谢谢你的回答。
【解决方案2】:

您只需调用一次 ToList() 即可获取排序列表。所有未来的操作都应该使用 sortedList。

sortedList = list.OrderBy().ToList();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    • 1970-01-01
    • 2013-08-04
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多