我正在使用 foreach 循环来计算问题的答案。
它计算一个问题的所有答案,但是当它加载下一个问题时,每次都需要一分钟。我怎样才能减少这个时间?
List<Questionnaire> myQuestionnaires = report.Project
.Questionnaires
.Where(q => q.Active)
.ToList<Questionnaire>();
foreach (Questionnaire q in myQuestionnaires)
{
foreach (ItemAnswer a in q.Answers)
{
//possible answers
}
}
最佳答案
我会做的是不使用 .ToList() 或 .AsEnumerable()。这两个函数将执行由您的 linq 语句生成的 T-SQL,并将所有记录拉入内存。
更好的选择是继续使用 linq 通过谓词过滤结果。
var query = report.Project
.Questionnaires
.Where(q => q.Active && q.Answers == /*some condition*/)
或
var query = report.Project
.Questionnaires
.Where(q => q.Active)
.Select(q => q.Answers) // Select the answers only
.Where(answers => answers.Property == /* some condition */)
然后,一旦完成对记录的过滤,在读取时调用 .ToList() 或 .AsEnumerable() 以获取结果。
这使您能够使用数据库来完成所有工作,而不是将集合拉入内存并进行迭代。
关于c# - 如何提高foreach循环的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30237512/