Я могу это сделать.где.список против интерфейса IQueryable.tolist. where, какой запрос лучше с точки зрения производительности?
У меня есть два запроса, оба дают один и тот же результат, но я хочу знать, какой из них более эффективен. Ниже приведены запросы, я написал только предложения запроса. Внутренние условия одинаковы для обоих запросов.
IQueryable ().Где().Список();
IQueryable ().Вызова метода toList().Где();
В моем конце я попробовал ниже код, и он показывает "IQueryable ().Вызова метода toList().Где (); " лучше. Есть несколько вопросов, которые я не понимаю: 1. не видя моего приведенного ниже временного кода, какой запрос более эффективен? 2. Как ФАС, как я знаю, IQueryable является хорошим для выполнения запросов удаленных данных. Итак, не лучше ли сначала отфильтровать элементы, а затем использовать ToList, чтобы нам не нужно было выполнять функцию ToList для нерелевантных элементов? (если это так, то почему ниже кода говорится, что запрос 2 более эффективен?)
Stopwatch st1 = new Stopwatch(); Stopwatch st2 = new Stopwatch(); int counter = 10000; IEnumerable<Employee> iEmp = null; IQueryable<Employee> qEmp = null; BindingList<Employee> bList = new BindingList<Employee>(); for (int i = 1; i <= counter; ++i) { bList.Add(new Employee { Department = $"Dept - {i}", EmployeeID = i, EmployeeName = $"Employee - {i}", Salary = i + 10000 }); } iEmp = bList.AsEnumerable<Employee>(); qEmp = bList.AsQueryable<Employee>(); st1.Start(); var t = qEmp.Where(x => x.EmployeeID % 2 == 0).ToList(); st1.Stop(); Console.WriteLine($"Queryable-Where-ToList: {st1.ElapsedTicks}"); st2.Start(); var t1 = qEmp.ToList().Where(x => x.EmployeeID % 2 == 0); st2.Stop(); Console.WriteLine($"Queryable-ToList-Where: {st2.ElapsedTicks}"); Console.ReadKey();
Что я уже пробовал:
Я попробовал пример, но я не удовлетворен, потому что он противоречит моей теории, и я не в состоянии оправдать результат.