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 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 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 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!"); }