какой из них лучше для заполнения DataGridView лямбда или linq? - PullRequest
1 голос
/ 10 декабря 2010

я заполнил 2 dataGridView двумя способами:
1) Лямбда-выражение:

  
 protected void FillLamdaMethod()
        {
            Stopwatch sw = Stopwatch.StartNew();
            using (eCommerceContext ctx = new eCommerceContext())
            {

                List<table_bilgisayar> listBilgisayar = new List<table_bilgisayar>();
               listBilgisayar = ctx.table_bilgisayar.ToList();
                dataGridViewLamda.DataSource = listBilgisayar;//qry.AsEnumerable();
            }
            sw.Stop();
          lblLamdaResult.Text = String.Format("Time used (float): {0} ms",sw.Elapsed.TotalMilliseconds)+Environment.NewLine;
            lblLamdaResult.Text+=String.Format("Time used (rounded): {0} ms", sw.ElapsedMilliseconds);


        }


2) Метод Linq:

 protected void FillClassicMethod()
        {
            Stopwatch sw = Stopwatch.StartNew();
            using (eCommerceContext ctx = new eCommerceContext())
            {
                List<table_bilgisayar> listBilgisayar = new List<table_bilgisayar>();
                listBilgisayar =(from q in ctx.table_bilgisayar select q).ToList();
                dataGridViewClasicLinq.DataSource = listBilgisayar;//(from q in ctx.table_bilgisayar select q.model).ToList();
            }
            sw.Stop();

            lblClassicResult.Text = String.Format("Time used (float): {0} ms", sw.Elapsed.TotalMilliseconds)+Environment.NewLine;
            lblClassicResult.Text += String.Format("Time used (rounded): {0} ms", sw.ElapsedMilliseconds);
        }


у меня есть 2 важных вопроса
1) этот метод секундомера правильный или достаточный или есть лучший способ для вычисления производительности?
2) на этот раз;я знаю, что лямбда-выражение гораздо быстрее классического linq (из x в таблице и т. д.), но результат теста удивителен:
1) лямбда-метод: 867 мс
2) метод linq: 39 мсправильный?я ожидаю, что это должно быть как раз наоборот ...

ТАКЖЕ нажмите кнопку fillButton для вызова этого метода.результат производительности тупо изменится.Я думаю, что это безумие.867 мсек результат второго клика 56 мсек третий клик 45 мс ....

Ответы [ 2 ]

1 голос
/ 10 декабря 2010

Я думаю, чтобы получить какой-либо надежный результат, вам нужно немного изменить свой тест.

Может быть, вы могли бы запустить секундомер, сделать 1000 циклов, вызывая ваш метод заполнения, остановить секундомер, а затем просто разделить свой результат на 1000, чтобы получить среднее значение.

Результаты могут кардинально измениться по ряду причин (например, другие процессы и / или потоки, потребляющие ресурсы процессора или запущенная сборка мусора .NET).Выполнение теста несколько раз и получение среднего значения поможет сгладить любые расхождения.

0 голосов
/ 10 декабря 2010

Я удивлен, что есть какая-то разница, я думал, что это просто другой синтаксис. Может быть, ваш Select (q=>q) замедляет это. Попробуйте

listBilgisayar = ctx.table_bilgisayar.ToList();
...