Оптимизация и целесообразность LINQ запроса - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день. Решил воткнуть Linq в свой курсач, просто для саморазвития, потому что до этого не работал с ним ни разу Без Linq
Листинг программы
  1. List<Session> search_list = new List<Session>();
  2. foreach (Session x in session_list) {
  3. if (x.pasport_num == Convert.ToInt32(passport)) {
  4. search_list.Add(x);
  5. }
  6. }
  7. if (search_list.Count != 0) {
  8. lab_info.Content = Extras.Time()+ "Информация по номеру паспорта " + passport;
  9. main_grid.ItemsSource = search_list;
  10. }
  11. else {
  12. lab_info.Content = Extras.Time()+ "Информация по номеру паспорта " + passport + " не обнаружена";
  13. }
c Linq
Листинг программы
  1. var linq_pass = from x in session_list
  2. where x.pasport_num == Convert.ToInt32(passport)
  3. select x;
  4. if (linq_pass.Count() != 0) {
  5. lab_info.Content = Extras.Time()+ "Информация по номеру паспорта " + passport;
  6. main_grid.ItemsSource = linq_pass;
  7. }
  8. else {
  9. lab_info.Content = Extras.Time()+ "Информация по номеру паспорта " + passport + " не обнаружена";
  10. }
Собственно что то мне подсказывает что в моем примере запрос выполняется дважды 1. if (linq_pass.Count() != 0) 2. main_grid.ItemsSource = linq_pass; т.к linq_pass.Count() функция, а в первом примере search_list.Count - значение. Может действительно в данном случае использовать Linq не имеет смысла?
ну и вообще в каком случае будет лучше производительность?

Решение задачи: «Оптимизация и целесообразность LINQ запроса»

textual
Листинг программы
  1. public class Test
  2.     {
  3.         public double X { get; set; }
  4.         public double Y { get; set; }
  5.  
  6.         public double Result
  7.         {
  8.             get { return Math.Sqrt(X * Y * 100) + Math.Sqrt(X * Y * 100); }
  9.         }
  10.     }
  11.  
  12. private static void Main(string[] args)
  13.         {
  14.             var tests = new List<Test>();
  15.             var r = new Random();
  16.             for (int i = 0; i < 100000; i++)
  17.             {
  18.                 tests.Add(new Test { X = r.NextDouble(), Y = r.NextDouble() });
  19.             }
  20.  
  21.             Stopwatch s = new Stopwatch();
  22.             s.Start();
  23.             var enumerable = tests.Select(x => x.Result > 0.1 && x.Result < 0.3 || x.Result > 0.6 && x.Result < 0.8).ToList();
  24.             s.Stop();
  25.             Console.WriteLine(s.ElapsedMilliseconds);
  26.             s.Reset();
  27.             s.Start();
  28.             var resultList = new List<Test>();
  29.             foreach (var test in tests)
  30.             {
  31.                 var result = test.Result;
  32.                 if (result > 0.1 && result < 0.3 || result > 0.6 && result < 0.8)
  33.                 {
  34.                     resultList .Add(test);
  35.                 }
  36.             }
  37.             s.Stop();
  38.             Console.WriteLine(s.ElapsedMilliseconds);
  39. Console.ReadKey();
  40. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.692 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут