繁体   English   中英

Linq在DateTime Collections上的最佳表现

[英]Linq on DateTime Collections Best Performance

我的应用程序有一个Job对象集合。 有一个称为Jobnumber的唯一属性(键)和一个称为Bookingtime的DateTime属性,它不一定是唯一的。 还有其他各种属性。

我想基于Bookingtime属性进行很多linq查询,并偶尔从集合中插入和删除对象。

如果集合中有1000到2000个对象,是否应该使用SortedList<TKey, TValue>或仅使用List<T>并使用linq手动排序?

选项会更改集合中的10,000个对象吗?

这些对象来自数据库,并且已经按Bookingtime排序,但是我需要处理某些datetime子集。

DateTime t1,t2; //equals some values.
var subSet = jobs.where(a=>a.Bookingtime >= t1 &&
a.Bookingtime < =    t2).ToList();

正如在文档中可以看到的那样, SortedList.Add (很遗憾,没有Java中的AddAll方法可以优化批量插入)在O(n)中执行,而OrderByO(n log n)中运行 这意味着只有在较小的列表(或排序列表)上, SortedList 才能胜过Linq

此外,请注意Linq使用惰性评估。 仅当您实际需要结果列表(或使用ToList ,...方法)时, ToList项目进行排序。 因此,如果您以后再也不对结果做任何事情,那么环境甚至都不会对数据进行排序。

本文甚至实现了一个真正的惰性OrderBy ,这样,如果您只需要前i项目,则不会对整个列表进行排序。

编辑 :根据更新的问题,您最好将.where语句作为WHERE合并到SQL查询中。 由于数据库在许多情况下具有极大地优化查询的手段,因此可以减少网络,内存和CPU的使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM