Advertisement
Fhernd

RendimientoInterlocked.cs

Aug 7th, 2014
1,633
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.73 KB | None | 0 0
  1. using System;
  2. using System.Diagnostics;
  3. using System.Threading;
  4.  
  5. namespace Recetas.CSharp.Cap04.R0411
  6. {
  7.     public sealed class RendimientoInterlocked
  8.     {
  9.         // Objeto para bloqueo en lock:
  10.         private static Object bloqueo = new Object();
  11.         // Variable a sincronizar:
  12.         private static int sincVariable = 0;
  13.         // Iteraciones
  14.         private static int iteraciones = 10000000;
  15.        
  16.         public static void Main()
  17.         {
  18.             // Creación cronómetro:
  19.             Stopwatch cron1 = Stopwatch.StartNew();
  20.            
  21.             // Uso de lock en un ciclo de 10000000 iteraciones:
  22.             for (int i = 1; i <= iteraciones; ++i)
  23.             {
  24.                 lock (bloqueo)
  25.                 {
  26.                     ++sincVariable;
  27.                 }
  28.             }
  29.             cron1.Stop();
  30.            
  31.             // Creación de otro cronómetro:
  32.             Stopwatch cron2 = Stopwatch.StartNew();
  33.            
  34.             // Uso de Interlocked.Increment:
  35.             for (int i = 1; i <= iteraciones; ++i)
  36.             {
  37.                 Interlocked.Increment(ref sincVariable);
  38.             }
  39.             cron1.Stop();
  40.            
  41.             // Muestra resultados en pantalla:
  42.             Console.WriteLine ("\nValor total de `sincVariable`: {0}", sincVariable.ToString());
  43.             Console.WriteLine ("\tTiempo de uso de lock: {0}",
  44.                 ((double) (cron1.Elapsed.TotalMilliseconds * 1000000) / iteraciones).ToString("0.00 ns")
  45.             );
  46.             Console.WriteLine ("\tTiempo de uso de Interlocked.Increment: {0}\n",
  47.                 ((double) (cron2.Elapsed.TotalMilliseconds * 1000000) / iteraciones).ToString("0.00 ns")
  48.             );
  49.         }
  50.     }
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement