J'ai lu que si le foreach est très simple, le surcoût que j'obtiens pour utiliser le parallèle ne vaut pas le coût. J'ai donc une simple application WPF pour faire quelques tests. J'ai ce code:Pourquoi le temps du parallèle.Foreach c'est haut la première fois et très bas les prochaines fois?
//Parallel.Foreach
txtLog.Text = txtLog.Text + "\r\n\r\n\r\nSe inicia el Parallel.Foreach a " + DateTime.Now;
miSw.Restart();
Parallel.ForEach(miLstInt,
(iteradorInt, state) =>
{
if (iteradorInt >= 500000)
{
state.Stop();
}
});
miSw.Stop();
txtLog.Text = txtLog.Text + "\r\nTiempo total del Parallel.Foreach: " + miSw.ElapsedMilliseconds.ToString();
//Forech
txtLog.Text = txtLog.Text + "\r\n\r\nSe inicia el foreach a " + DateTime.Now;
miSw.Restart();
foreach (int i in miLstInt)
{
if (i >= 500000)
{
break;
}
}
miSw.Stop();
txtLog.Text = txtLog.Text + "\r\nTiempo total del foreach: " + miSw.ElapsedMilliseconds.ToString();
J'ai un bouton que lorsque je clique dessus, courir les deux foreach et d'afficher les résultats dans une zone de texte.
Lorsque je cours pour la première fois, parallel foreach dure environ 29ms et dure environ 3ms. Mais la deuxième fois que je l'exécute et les fois suivantes, foreach parallèle prend 0ms et foreach est entre 2 ou 3ms, plus de fois 3 que 2, mais les résultats sont plus stables.
Donc, mon doute est, pourquoi est-ce plus lentement la première fois, mais plus tard est plus rapide? devrais-je tenir compte de cela, si je vais exécuter une commande plusieurs fois, bien que la première fois soit plus lente, cela vaut-il la peine de faire un parallèle si les prochaines fois seront plus rapides?
Je soupçonne fortement que c'est juste du temps JIT régulier parce que vous mesurez le temps de façon moins optimale - https: //stackoverflow.com/questions/457605/how-to-measure-code-performance-in-net ... Considérez juste la fermeture en double si vous êtes d'accord. –