Linq on DateTime 集合最佳性能

Linq on DateTime Collections Best Performance

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

我想根据 Bookingtime 属性 进行大量 linq 查询,并偶尔从集合中插入和删除对象。

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

集合中的 10,000 个对象的选项是否发生变化?

对象来自数据库并且已经按预订时间排序,但我需要处理某些日期时间子集。

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

正如您在文档中看到的那样,SortedList.Add (too bad there is no AddAll method as in Java that could optimize bulk insertion) operation is performed in O(n) whereas OrderByO(n log n) 中运行。这意味着仅在小型(或排序列表)上,SortedList can 优于 Linq.

此外请注意 Linq 使用惰性求值。如果您确实需要结果列表(或使用 ToList,... 方法),它只会对项目进行排序。如果您因此以后再也不对结果做任何事情,环境甚至不会对数据进行排序。

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

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