Оптимизация и целесообразность 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();
}