c# - 如何提高foreach循环的性能

标签 c# asp.net-mvc-3 loops foreach

我正在使用 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/

相关文章:

c# - 从窗口句柄获取窗口实例

asp.net-mvc - mvc [DataType(DataType.EmailAddress)无需验证

c# - 在静态类上调用重载的泛型方法

Python:跟踪文本文件中的当前列

r - 在 R 中列表的矩阵元素中应用函数

java - 为什么即使不满足循环内设置的条件,我的循环错误消息也会打印出来

c# - TextBox AutoPostBack 抢占更多事件

c# - ValidationExpression Number正负Decimal

c# - iTextSharp 如何将页面从横向旋转/切换为纵向

jQuery、MVC3 : Submitting a partial view form within a modal dialog