两个LINQ语句中的哪一个会更快?

时间:2013-07-19 06:33:13

标签: performance linq

1]

IQueryable<StronglyTypedObject> cp = 
      context.People.OfType<StronglyTypedObject>()
                    .Where(o=> o.EmployerId == Id_Method_Param_Variable);
List<StronglyTypedObject> lst = cp.ToList();

2]

List<StronglyTypedObject> cp = 
      context.People.OfType<StronglyTypedObject>()
                    .Where(o=> o.EmployerId == Id_Method_Param_Variable)
                    .ToList();

这可能是一个非常简单的问题,但我对LINQ相对较新,如果在这两次执行中存在性能差异,因为检索到的记录数量可能很高,我真的很感兴趣。

2 个答案:

答案 0 :(得分:0)

不,不会有性能降低。我的意思是,当你分配更多变量时,你会得到一个非常,非常,非常(千分之一毫秒)第一个中的速度略微降低,而第二个则略微降低速度。但仅此而已。

另外:If you have two horses and you want to know which of the two is the faster, then race your horses!

答案 1 :(得分:0)

在第一种情况下,您创建了一个附加变量,该变量保存对查询定义的引用(这只是堆栈上的一个附加引用)。查询是简单数据,定义查询时不执行任何操作。当您尝试获取结果时(例如,调用ToList()或迭代查询),将执行查询。

要了解您的样本之间的差异,请考虑以下课程:

public class Query
{
    private int _employeeId;

    public Query(int employeeId)
    {
        _employeeId = employeeId;
    }

    // here is query execution
    public List<Employee> ToList()
    {
        string sqlQuery = "SELECT * FROM Employees WHERE ID = " + _employeeId;
        // we execute sql query on server
        // and return employees which matches our query data            
        return listOfEmployees;
    }
}

您的第一个样本:

var query = new Query(42);
var result = query.ToList();

你的第二个样本:

var result = new Query(42).ToList();

唯一的区别是您是否存储对查询变量的引用。