public static void Main(string[] args) { Console.WriteLine("Warm-up call"); TestDelegate test = A; test += A; test += A; test += A; test += A; test += A; test += A; test += A; test += A; test += A; // 10 times in the invocation list ParallelInvoke.Invoke(test, "string"); // warm-up Stopwatch sw = new Stopwatch(); GC.Collect(); GC.WaitForPendingFinalizers(); Console.WriteLine("Profiling calls"); sw.Start(); for (int i = 0; i < 100000; i++) { // ParallelInvoke.Invoke(test, "string"); // profiling ParallelInvoke Invoke(test, "string"); // profiling native BeginInvoke/EndInvoke } sw.Stop(); Console.WriteLine("Done in {0} ms", sw.ElapsedMilliseconds); Console.ReadKey(true); }