Clase para cronometrar procesos
using System;
using System.Diagnostics;
using System.Text;
namespace Rutinas.Service
{
public sealed class Benchmark
{
public enum Salida
{
porConsola,
porConsolaVS
}
public static void Proceso(Action accion, string mensaje = "Tiempo de proceso: ", Salida salida = Salida.porConsolaVS)
{
Stopwatch cronometro = Stopwatch.StartNew();
cronometro.Reset();
cronometro.Start();
accion();
cronometro.Stop();
Imprimir(Resultado(ref cronometro), mensaje, salida);
}
private static void Imprimir(string resultado, string mensaje, Salida salida)
{
switch (salida)
{
case Salida.porConsola:
Console.WriteLine(mensaje + resultado);
break;
case Salida.porConsolaVS:
Debug.WriteLine(mensaje + resultado);
break;
default:
Debug.WriteLine(mensaje + resultado);
break;
}
}
private static string Resultado(ref Stopwatch cronometro)
{
const string SEPARADOR = ":";
const string CEROS = "00";
string vacio = CEROS + SEPARADOR;
StringBuilder cadena = new StringBuilder();
cadena.Append((cronometro.Elapsed.Hours != 0) ? cronometro.Elapsed.Hours.ToString() + SEPARADOR : vacio);
cadena.Append((cronometro.Elapsed.Minutes != 0) ? cronometro.Elapsed.Minutes.ToString() + SEPARADOR : vacio);
cadena.Append((cronometro.Elapsed.Seconds != 0) ? cronometro.Elapsed.Seconds.ToString() + SEPARADOR : vacio);
cadena.Append((cronometro.Elapsed.Milliseconds != 0) ? cronometro.Elapsed.Milliseconds.ToString() : vacio);
return cadena.ToString().Trim();
}
}
}