【发布时间】:2011-03-08 07:33:38
【问题描述】:
我有一个包含任务列表的数据库表。 我有一个程序可以计算指定时间段内每分钟运行的任务数。
我有一个查询可以获取指定时间段内的所有结果,还有一个循环中的 linq 查询可以获取每分钟间隔内的所有结果。
这一切都很好,但现在我很难提高代码的性能。
for(int i=0;i<oneMinuteIntervals;i++){
var resultsThisMinute =
from fullResult //this contains all of the tasks in the whole period
where //task is running during this one minute interval
foreach(var result in resultsThisMinute){
//Does stuff
}
}
即使 resultsThisMinute 为空,foreach 循环也需要大约 33 毫秒。我尝试添加一个 if(resultsThisMinute.Count() == 0) 但这需要与 for 循环一样长的时间。有很多情况下在一分钟内有 0 个任务,所以我希望有一种更快的方法来检查这一点。
如果有,请留言,非常感谢!
【问题讨论】:
-
与其使用 .Count() 迭代集合的内容,不如使用 .Any() 而不是。
-
Any 仍然会迭代到找到某些东西的地步。这可能是每次扫描的大部分集合。
-
按时间四舍五入/下限到最接近的分钟分组怎么样?然后,您将只在行动所在的分钟内拥有组。
-
@spender,如果一项任务需要 5 分钟,则需要作为 5 个组的成员参与。这不是默认的分组行为。