我有以下代码:
var tempResults = new Dictionary<Record, List<Record>>();
errors = new List<Record>();
foreach (Record record in diag)
{
var code = Convert.ToInt16(Regex.Split(record.Line, @"\s{1,}")[4], 16);
var cond = codes.Where(x => x.Value == code && x.Active).FirstOrDefault();
if (cond == null)
{
errors.Add(record);
continue;
}
var min = record.Datetime.AddSeconds(downDiff);
var max = record.Datetime.AddSeconds(upDiff);
//PROBLEM PART - It takes around 4,5ms
var possibleResults = cas.Where(x => x.Datetime >= min && x.Datetime <= max).ToList();
if (possibleResults.Count == 0)
errors.Add(record);
else
{
if (!CompareCond(record, possibleResults, cond, ref tempResults, false))
{
errors.Add(record);
}
}
}
变量diag是记录列表。
变量cas是记录列表,大约有50k个项目。
问题在于运行速度太慢了。第一个where子句的部分需要大约4,6599毫秒,例如对于List diag中的3000条记录,它需要3000*4,6599=14秒。是否有任何优化代码的选项?
codes
,只保留活动的项目。这样可以减少在循环内部需要搜索的数量。 - Marco