Оптимизация и целесообразность 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();
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д