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 OrderBy
在 O(n log n) 中运行。这意味着仅在小型(或排序列表)上,SortedList
can 优于 Linq.
此外请注意 Linq 使用惰性求值。如果您确实需要结果列表(或使用 ToList
,... 方法),它只会对项目进行排序。如果您因此以后再也不对结果做任何事情,环境甚至不会对数据进行排序。
This article 甚至实现了真正的惰性 OrderBy
,这样如果您只需要前 i
项,它不会对整个列表进行排序。
编辑:根据您更新的问题,您最好将 .where
语句作为 WHERE
合并到 SQL 查询中。这可以减少网络、内存和 CPU 使用,因为在许多情况下数据库可以极大地优化查询。
我的应用程序有一个作业对象集合。有一个称为 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 OrderBy
在 O(n log n) 中运行。这意味着仅在小型(或排序列表)上,SortedList
can 优于 Linq.
此外请注意 Linq 使用惰性求值。如果您确实需要结果列表(或使用 ToList
,... 方法),它只会对项目进行排序。如果您因此以后再也不对结果做任何事情,环境甚至不会对数据进行排序。
This article 甚至实现了真正的惰性 OrderBy
,这样如果您只需要前 i
项,它不会对整个列表进行排序。
编辑:根据您更新的问题,您最好将 .where
语句作为 WHERE
合并到 SQL 查询中。这可以减少网络、内存和 CPU 使用,因为在许多情况下数据库可以极大地优化查询。