public MyEventListener2(MyEventProvider provider, MyEventProvider provider2)
 {
     _myWeakEventHolder.Add(provider.MyEvent.RegisterWeak(AtMyEvent));
     _myWeakEventHolder.Add(provider.MyEvent2.RegisterWeak(AtMyEvent));
     _myWeakEventHolder.Add(provider2.MyEvent.RegisterWeak(AtMyEvent));
     _myWeakEventHolder.Add(provider2.MyEvent2.RegisterWeak(AtMyEvent));
 }
        public void GCTest()
        {
            var provider = new MyEventProvider();
            var listener = new MyEventListener();

            listener.Listen(provider);
            Assert.That(EventManager.Count, Is.EqualTo(1), "WeakEventManager.Count");

            provider.Raise();
            Assert.That(listener.Count, Is.EqualTo(1), "listener.Count");

//			var weakListener = new WeakReference(listener);
            listener = null;
            // how long we have to wait until the GC collects?

            GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect();

            var stopwatch = new Stopwatch(); stopwatch.Start();

            while (EventManager.Count > 0)
            {
                provider.Raise();
                Thread.Sleep(10);
            }
            Trace.WriteLine("Collected after " + stopwatch.Elapsed);
            //Assert.That(WeakEventManager.Count, Is.EqualTo(0),"WeakEventManager.Count");
        }
        public void EventHandler()
        {
            var provider = new MyEventProvider();
            var listener = new MyEventListener();

            listener.Listen(provider);
            provider.Raise();
            Assert.That(listener.Count, Is.EqualTo(listener.Count), "listener.Count");
        }
        public void BasicˑTest()
        {
            var provider = new MyEventProvider();
            var listener = new MyEventListener();

            listener.RegisterˑMyEvent(provider);
            provider.RaiseˑMyEvent();
            Assert.That(listener.EventCount, Is.EqualTo(1));

            listener.ReleaseˑMyEvent();
            provider.RaiseˑMyEvent();
            Assert.That(listener.EventCount, Is.EqualTo(1));
        }
        public void ProviderGarbageCollectionˑTest()
        {
            var provider = new MyEventProvider();
            var listener = new MyEventListener();

            listener.RegisterˑMyEvent(provider);
            provider.RaiseˑMyEvent();
            Assert.That(listener.EventCount, Is.EqualTo(1));

            var c = EventHandle.StatisticsːInstancesˑCurrent;

            provider = null;
            ForceGarbageCollection();
            Assert.That(((EventHandle)listener._MyEventHandle).IsAlive, Is.EqualTo(false));
        }
        public void GCCollectTest()
        {
            var provider = new MyEventProvider();
            var listener = new MyEventListener();

            listener.Listen(provider);
            Assert.That(EventManager.Count, Is.EqualTo(1), "WeakEventManager.Count");

            provider.Raise();
            Assert.That(listener.Count, Is.EqualTo(1), "listener.Count");

            listener = null;
            EventManager.Collect(true);
            Assert.That(EventManager.Count, Is.EqualTo(0), "WeakEventManager.Count");
        }
        public void ListenerGarbageCollectionˑTest()
        {
            var provider = new MyEventProvider();
            var listener = new MyEventListener();

            listener.RegisterˑMyEvent(provider);
            provider.RaiseˑMyEvent();
            Assert.That(listener.EventCount, Is.EqualTo(1));

            var c = EventHandle.StatisticsːInstancesˑCurrent;

            listener = null;
            ForceGarbageCollection();
            provider.RaiseˑMyEvent();
            Assert.That(((IEventSourceInternal)provider.MyEvent).GetContainers().Count, Is.EqualTo(0));
        }
        public void PerformanceTest1()
        {
            var provider = new MyEventProvider();
            var listener = new MyEventListener();

            listener.Listen(provider);
            var count = 1000000;

            var stopwatch = new Stopwatch(); stopwatch.Start();

            for (int i = 0; i < count; i++)
            {
                provider.Raise();
            }
            stopwatch.Stop();
            Assert.That(listener.Count, Is.EqualTo(count), "listener.Count");
            Trace.WriteLine(string.Format("Time: {0}", new TimeSpan(stopwatch.ElapsedTicks * 1)));
        }
        public void MassiveListenerGCTest()
        {
            var       provider        = new MyEventProvider();
            var       eventContainers = ((EventSource)provider.MyEvent).GetContainers();
            var       r         = new System.Random();
            var       stopwatch = new Stopwatch(); stopwatch.Start();
            const int max       = 5000;
            var       c         = eventContainers.Count;

            for (int i = 1; i <= max; i++)
            {
                var listener = new MyEventListener();
                listener.RegisterˑMyEvent(provider);
                provider.RaiseˑMyEvent();
                Thread.Sleep(r.Next(8, 12 + 1));
                if (eventContainers.Count + c < i)
                {
                    //OK any listener has been collected
                    Trace.WriteLine("GC collected at iteration " + i + " " + stopwatch.Elapsed + " " + eventContainers.Count + " alive");
                    c = i - eventContainers.Count;
                }
                listener.Dispose();
                listener = null;
            }
            Trace.WriteLine(eventContainers.Count * 100 / max + "% alive after " + stopwatch.Elapsed);
            var next = stopwatch.Elapsed.Add(TimeSpan.FromSeconds(1));

            while (eventContainers.Count > 0)
            {
                if (stopwatch.Elapsed < next)
                {
                    Thread.Sleep(100);
                    //ForceGarbageCollection();
                    provider.RaiseˑMyEvent(); continue;
                }
                Trace.WriteLine(eventContainers.Count * 100 / max + "% alive after " + stopwatch.Elapsed);
                next = stopwatch.Elapsed.Add(TimeSpan.FromSeconds(1));
            }

            //Assert.Fail("Nothing collected!");
        }
        public void MassiveGCTest()
        {
            var       provider  = new MyEventProvider();
            var       r         = new System.Random();
            var       stopwatch = new Stopwatch(); stopwatch.Start();
            const int max       = 2000;
            var       c         = EventManager.Count;

            for (int i = 1; i <= max; i++)
            {
                var listener = new MyEventListener();
                listener.Listen(provider);
                provider.Raise();
                Thread.Sleep(r.Next(8, 12 + 1));
                if (EventManager.Count + c < i)
                {
                    //OK any listener has been collected
                    Trace.WriteLine("GC collected at interation " + i + " " + stopwatch.Elapsed + " " + EventManager.Count + " alive");
                    c = i - EventManager.Count;
                }
            }
            Trace.WriteLine(EventManager.Count * 100 / max + "% alive after " + stopwatch.Elapsed);
            var next = stopwatch.Elapsed.Add(TimeSpan.FromSeconds(1));

            while (EventManager.Count > 0)
            {
                if (stopwatch.Elapsed < next)
                {
                    Thread.Sleep(10); EventManager.Collect(); continue;
                }
                Trace.WriteLine(EventManager.Count * 100 / max + "% alive after " + stopwatch.Elapsed);
                next = stopwatch.Elapsed.Add(TimeSpan.FromSeconds(1));
            }

            //Assert.Fail("Nothing collected!");
        }
 public void RegisterˑMyEvent(MyEventProvider listener)
 {
     _MyEventHandle = listener.MyEvent.RegisterWeak(this, "AtMyEvent", AtMyEvent);
 }
 public void Listen(MyEventProvider provider)
 {
     _MyEventHolder = provider.MyEvent.RegisterWeak(AtMyEvent);
 }