有没有办法有同样的想法,也就是将一天的时间设置在这些值上,而不会对搜索时间造成巨大的影响?如果没有这段代码,它就会在一秒钟内加载一个新页面。添加它之后,页面加载之间的时间将达到6-7秒。
//incidents is an IQueryable
//Set date backwards one day if incident is entered during third shift after midnight
for (var x = 0; x < incidents.Count(); x++){
DateTime createdDate = incidents.ToList().ElementAt(x).DateCreated;
TimeSpan createdTime = createdDate.TimeOfDay;
if (createdTime > startTime && createdTime < endTime){
incidents.Skip(x).First().DateCreated = new DateTime(2019,01,01);
}
}发布于 2019-01-29 18:00:29
因为incidents是一个IQueryable,所以您要执行数据库调用2x+1时间。一次给Count,一次给ToList,一次给Skip(x).First。
您可以尝试在循环之前调用ToList(),并处理水合物列表,以查看性能是否有所提高。
发布于 2019-01-29 18:04:26
这可能与许多.ToList()、.Skip()和.Count()调用有关。相反,请尝试以下几点:
foreach (var incident in incidents.ToList())
{
var createdDate = incident.DateCreated;
var createdTime = createdDate.TimeOfDay;
var index = incidents.IndexOf(indcident);
if (createdTime > startTime && createdTime < endTime){
incidents.Skip(index).First().DateCreated = new DateTime(2019,01,01);
}
}而且,我对.Skip()不是很熟悉,但你能不能把代码简化成这样呢?
foreach (var incident in incidents.ToList())
{
var createdDate = incident.DateCreated;
var createdTime = createdDate.TimeOfDay;
if (createdTime > startTime && createdTime < endTime){
incident.DateCreated = new DateTime(2019, 01, 01);
}
}https://stackoverflow.com/questions/54426998
复制相似问题