Оптимизация и целесообразность LINQ запроса - C#
Формулировка задачи:
Добрый день. Решил воткнуть Linq в свой курсач, просто для саморазвития, потому что до этого не работал с ним ни разу
Без Linq
c Linq
Собственно что то мне подсказывает что в моем примере запрос выполняется дважды
1. if (linq_pass.Count() != 0)
2. main_grid.ItemsSource = linq_pass;
т.к linq_pass.Count() функция, а в первом примере search_list.Count - значение. Может действительно в данном случае использовать 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 + " не обнаружена"; }
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 + " не обнаружена"; }
ну и вообще в каком случае будет лучше производительность?
Решение задачи: «Оптимизация и целесообразность 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(); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д