我正在开发一个C#项目,并使用SQL Server 2008 R2 express作为后端。
我必须找到BookingDate's Date component
大于tempDate
的预订次数。
我写了以下代码:
DateTime tempDate = new DateTime(DateTime.Now.Year, 4, 1); //<= 5ms
var bookings = context.Bookings.Where(x => x.IsDeleted == false).ToList(); //<= 2ms
var count = bookings.Count(x => x.BookingDate.Date >= tempDate); //<= 2,534 ms
这段代码可以正常运行并且给我正确的计数,但执行时间差不多是3秒(我发现使用VS 2015执行时间)。我想优化此代码,以便减少执行时间。预订表包含近20,000条记录。
如何最大限度地降低计算成本?
答案 0 :(得分:3)
原来我之前的答案并不那么好。 我使用一个包含10,000个实体的表并使用.ToList()进行了一些测试,时间从280ms到380ms。另外我发现选择.Date在linq查询中不起作用,所以你必须这样做.ToList()。如果要在查询中选择count,则无法使用DateTime.Date,只需使用DateTime。
2,500毫秒很慢。如果您在发布模式下运行应用程序,它可能会快得多。
DateTime tempDate = new DateTime(DateTime.Now.Year, 4, 1);
int count = context.Bookings.Count(x => x.IsDeleted == false && x.BookingDate >= tempDate);
问题是.ToList()因为它查询所有表行而不是查询计数