Cómo: Medir el rendimiento de consultas PLINQ
En este ejemplo se muestra cómo usar la clase Stopwatch para medir el tiempo que tarda en ejecutarse una consulta PLINQ.
Ejemplo
En este ejemplo se usa un bucle foreach vacío (For Each en Visual Basic) para medir el tiempo que tarda en ejecutarse la consulta. En el código real, normalmente, el bucle contiene pasos de procesamiento adicionales que aumentan el tiempo de ejecución total de la consulta. Observe que el cronómetro se inicia justo antes del bucle, porque es en ese momento cuando comienza la ejecución de la consulta. Si necesita una medición más exacta, puede usar la propiedad ElapsedTicks en lugar 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();
}
El tiempo de ejecución total es una medida útil cuando se prueban implementaciones de consultas, pero no siempre lo dice todo. Para obtener una vista más detallada y completa de la interacción de los subprocesos de consulta entre sí y con otros procesos en ejecución, use el visualizador de simultaneidad. Esta herramienta está disponible en Microsoft Visual Studio 2010 Premium. Para obtener más información, vea Visualizador de simultaneidad.