1

2つのdataGridViewに2種類のメソッドを入力しました:
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)Lambdaメソッド:867 ms
2)Linqメソッド:39 msこの結果は正しいですか?私はそれが正反対でなければならないと思います...

また、fillButtonをクリックして、このメソッドを呼び出します。パフォーマンス結果はばかげて変化します。これはクレイジーだと思います。867ミリ秒の2回目のクリックの結果56ミリ秒の3回目のクリック45ミリ秒...

4

2 に答える 2

1

信頼できる結果を得るには、テストを少し変更する必要があると思います。

ストップウォッチを開始し、fillメソッドを呼び出して1000回ループし、ストップウォッチを停止してから、結果を1000で割って平均を得ることができます。

結果は、さまざまな理由で大幅に変化する可能性があります(たとえば、他のプロセスやスレッドがCPUを消費したり、.NETガベージコレクションを実行したりするなど)。テストを複数回実行し、平均を取ると、不一致を滑らかにするのに役立ちます。

于 2010-12-09T22:10:03.307 に答える
0

違いがあることに驚いています。構文が違うだけだと思いました。多分あなたSelect (q=>q)はそれを遅くします。試す

listBilgisayar = ctx.table_bilgisayar.ToList();
于 2010-12-09T21:45:07.823 に答える