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

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

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

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

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

textual
Листинг программы
public class Test
    {
        public double X { get; set; }
        public double Y { get; set; }
 
        public double Result
        {
            get { return Math.Sqrt(X * Y * 100) + Math.Sqrt(X * Y * 100); }
        }
    }
 
private static void Main(string[] args)
        {
            var tests = new List<Test>();
            var r = new Random();
            for (int i = 0; i < 100000; i++)
            {
                tests.Add(new Test { X = r.NextDouble(), Y = r.NextDouble() });
            }
 
            Stopwatch s = new Stopwatch();
            s.Start();
            var enumerable = tests.Select(x => x.Result > 0.1 && x.Result < 0.3 || x.Result > 0.6 && x.Result < 0.8).ToList();
            s.Stop();
            Console.WriteLine(s.ElapsedMilliseconds);
            s.Reset();
            s.Start();
            var resultList = new List<Test>();
            foreach (var test in tests)
            {
                var result = test.Result;
                if (result > 0.1 && result < 0.3 || result > 0.6 && result < 0.8)
                {
                    resultList .Add(test);
                }
            }
            s.Stop();
            Console.WriteLine(s.ElapsedMilliseconds);
Console.ReadKey();
}

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


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

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

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