2010-12-09 49 views
1

i rempli 2 datagridview avec deux types de procédé:
1) Lambda Expression:
lequel est le meilleur pour remplir DataGridView lambda ou linq?


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 Méthode:

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); 
     }


i ai 2 question importante
1) cette méthode chronomètre est-elle correcte ou suffisante ou existe-t-il une meilleure méthode pour calculer la performance?
2) En haut cette fois; Je sais que l'expression lambda est plus rapide que LINQ classique (de x dans le tableau, etc ...) Mais Résultat du test est surprenant:
1) Méthode Lambda: 867 ms
2) Linq Méthode: 39 ms Cette le résultat est correct? Je m'attends à ce que ce soit juste le contraire ...

AUSSI cliquez sur fillButton pour appeler cette méthode. résultat de la performance bêtement changer. Je pense que c'est fou. 867 ms deuxième clic résultat 56 ms troisième clic 45 ms ....

+0

Les exécutez-vous les uns après les autres? Vos résultats sont-ils faussés par JIT? Votre source de données sert-elle les résultats du cache une seconde fois? –

Répondre

0

Je suis surpris qu'il y ait une différence, je pensais que c'est juste une syntaxe différente. Peut-être que votre Select (q=>q) le ralentit. Essayez

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

j'ai changé mais le résultat de la performance est le même qu'avant – Penguen

+0

qu'est-ce que eCommerceContext()? une connexion db? peut-être une certaine connexion de connexion se passe puisque maintenant vous dites qu'il est plus rapide la deuxième et la troisième fois – Vitalik

1

Je pense que pour obtenir un résultat fiable, vous devez modifier légèrement votre test. Peut-être que vous pourriez démarrer le chronomètre, bouclez 1000 fois en appelant votre méthode de remplissage, arrêtez le chronomètre, puis divisez simplement votre résultat par 1000 pour obtenir une moyenne.

Les résultats peuvent changer radicalement pour un certain nombre de raisons (par exemple, d'autres processus et/ou threads qui consomment la CPU ou la Garbage Collection .NET en cours d'exécution). Faire un test plusieurs fois et prendre une moyenne aidera à éliminer les divergences.