Development Class C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Runtime.InteropServices;
namespace Utility
{
  public static  class TestPerformance
  {
    public static void PrepareForOperation()
    {
      GC.Collect();
      GC.WaitForPendingFinalizers();
      GC.Collect();
      Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.High;
      Time( "", 1, () => { } );
    }
    public static void Time( string name, int iteration, Action action )
    {
      if ( name.Length == 0 ) return;
      //??GC???????????????????
      GC.Collect( GC.MaxGeneration, GCCollectionMode.Forced );
      int[] gcCounts = new int[GC.MaxGeneration + 1];
      for ( int i = 0; i <= GC.MaxGeneration; i++ )
      {
        gcCounts[i] = GC.CollectionCount( i );
      }
      ConsoleColor currentForeColor = Console.ForegroundColor;
      Console.ForegroundColor = ConsoleColor.Yellow;
      Console.WriteLine( name );
      //??????????????CPU????1?
      Stopwatch watch = new Stopwatch();
      long cyclesTimes = GetCurrentThreadTimes();
      long start = Process.GetCurrentProcess().TotalProcessorTime.Ticks;
      watch.Start();
      for ( int i = 0; i < iteration; i++ ) action();
      watch.Stop();
      long cpuCycles = GetCurrentThreadTimes() - cyclesTimes;
      long end = Process.GetCurrentProcess().TotalProcessorTime.Ticks;
      Console.ForegroundColor = currentForeColor;
      Console.WriteLine( "\tTime Elapsed:\t" +
        watch.ElapsedTicks / (double)Stopwatch.Frequency + "s" + "avg :" + (watch.ElapsedTicks / (double)Stopwatch.Frequency/iteration).ToString("F10")
              );
      Console.WriteLine( "\tCPU Cycles:\t" + cpuCycles.ToString( "N0" ) );
      for ( int i = 0; i <= GC.MaxGeneration; i++ )
      {
        int count = GC.CollectionCount( i ) - gcCounts[i];
        Console.WriteLine( "\tGen " + i + ": \t\t" + count );
      }
      Console.WriteLine();
      Console.ReadLine();  
    }
    [DllImport( "kernel32.dll", SetLastError = true )]
    static extern bool GetThreadTimes( IntPtr hThread, out long lpCreationTime,
       out long lpExitTime, out long lpKernelTime, out long lpUserTime );
    [DllImport( "kernel32.dll" )]
    static extern IntPtr GetCurrentThread();
    static long GetCurrentThreadTimes()
    {
      long l;
      long kernelTime, userTimer;
      GetThreadTimes( GetCurrentThread(), out l, out l, out kernelTime, out userTimer );
      return kernelTime + userTimer;
    }
  }
    
}