public void WeakEventHandlerProxy_RaiseEvent_Performance_Within_500x_Non_Reflection_Action()
        {
            var testIterations = 10000;

            var subscriber = new CustomEventSubscriber <EventArgs>();
            var proxy      = new WeakEventHandlerProxy <EventArgs>(new EventHandler(subscriber.HandleEvent));

            var stopwatch        = new Stopwatch();
            var proxyInvokeStart = stopwatch.ElapsedTicks;

            stopwatch.Start();
            for (var i = 0; i < testIterations; i++)
            {
                proxy.RaiseEvent(null, null);
            }
            stopwatch.Stop();
            var proxyInvokeTicks = stopwatch.ElapsedTicks - proxyInvokeStart;

            var actionInvokeStart = stopwatch.ElapsedTicks;

            stopwatch.Start();
            for (var i = 0; i < testIterations; i++)
            {
                subscriber.HandleEvent(null, null);
            }
            stopwatch.Stop();
            var actionInvokeTicks = stopwatch.ElapsedTicks - actionInvokeStart;

            Assert.IsTrue((actionInvokeTicks * 500) >= proxyInvokeTicks,
                          "Invoke through the proxy should be within 100x the ticks to avoid reflection");
        }