Comment : mesurer les performances de requêtes PLINQ
Cet exemple montre comment utiliser la classe Stopwatch pour mesurer la durée d'exécution d'une requête PLINQ.
Exemple
Cet exemple utilise une boucle foreach vide (For Each en Visual Basic) pour mesurer la durée d'exécution de requête. Dans du code réel, la boucle contient en général des étapes de traitement supplémentaires qui viennent s'ajouter à la durée totale d'exécution de la requête. Remarquez que le chronomètre est lancé juste avant la boucle, car c'est à ce moment là que l'exécution de la requête commence. Si vous avez besoin de mesures plus affinées, vous pouvez utiliser la propriété ElapsedTicks au lieu de ElapsedMilliseconds.
Sub Main()
Dim source = Enumerable.Range(0, 3000000)
Dim queryToMeasure = From num In source
Where num Mod 3 = 0
Select Math.Sqrt(num)
Console.WriteLine("Measuring...")
' The query does not run until it is enumerated.
' Therefore, start the timer here.
Dim sw = System.Diagnostics.Stopwatch.StartNew()
' For pure query cost, enumerate and do nothing else.
For Each n As Double In queryToMeasure
Next
Dim elapsed As Long
elapsed = sw.ElapsedMilliseconds ' or sw.ElapsedTicks
Console.WriteLine("Total query time: {0} ms.", elapsed)
' Keep the console window open in debug mode.
Console.WriteLine("Press any key to exit.")
Console.ReadKey()
End Sub
static void Main()
{
var source = Enumerable.Range(0, 3000000);
var queryToMeasure = from num in source
where num % 3 == 0
select Math.Sqrt(num);
Console.WriteLine("Measuring...");
// The query does not run until it is enumerated.
// Therefore, start the timer here.
System.Diagnostics.Stopwatch sw = System.Diagnostics.Stopwatch.StartNew();
// For pure query cost, enumerate and do nothing else.
foreach (var n in queryToMeasure) { }
long elapsed = sw.ElapsedMilliseconds; // or sw.ElapsedTicks
Console.WriteLine("Total query time: {0} ms", elapsed);
// Keep the console window open in debug mode.
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
Connaître la durée d'exécution totale est utile lorsque vous expérimentez avec les implémentations de requête, mais elle ne révèle pas tout. Pour en savoir plus sur l'interaction des threads de requête les uns avec les autres et avec d'autres processus en cours d'exécution, utilisez le visualiseur concurrentiel. Cet outil est disponible dans Microsoft Visual Studio 2010 Premium. Pour plus d'informations, consultez Visualiseur concurrence.