[英]Performance of DateTime comparison in LINQ
例如,我有一些数据源(可能是数据库),我需要提取上个月的所有记录。 我正在使用LINQ。 有两种可能的方法来实现这一目标:
第一:
var res = from rec in _records
where rec.RequestDateTime.Date.Year == date.Year &&
rec.RequestDateTime.Date.Month == date.Month
select rec;
第二(使用直接日期比较):
var year = date.Year;
var month = date.Month;
var monthStart = new DateTime(year, month, 1);
var monthEnd = new DateTime(year, month, DateTime.DaysInMonth(year, month));
var res = from rec in _records
where rec.RequestDateTime.Date >= monthStart &&
rec.RequestDateTime.Date <= monthEnd
select rec;
我听说第二个代码对大多数LINQ提供程序工作得更快,但找不到任何证据或解释(或反证)。 那么,实际上哪种方式更好地用于更好的性能以及为什么?
我会更进一步 - 对于几乎所有提供商(尤其是LINQ到对象),它将更快地运行。 在谈论索引数据时 - 数据库索引通常是排序的,因此基于范围进行选择真的非常快速和简单。 >=
和<=
不需要解释,它可以非常快速地直接跳到所需范围。 但是,如果您要比较年份和月份,则有两种选择:
对于最简单的情况(LINQ-to-Objects),情况也是如此; >=
etc是微不足道的 - 它是一个数字比较。 测试月/年需要计算月/年。 该数据不是作为整数显式存储的,也不是直接存在的。 是的,它是不算过分昂贵,但考虑日期EN-集体时,它也不是免费的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.