public void TestWithLocalVariableInAnonymousMethod() { var counter = new InstanceCounter(); var evSrc = new EventSource(); var evSink1 = new EventSink2(counter, evSrc); var evSink2 = new EventSink2(counter, evSrc); var evSink3 = new EventSink2(counter, evSrc); var evSink4 = new EventSink2(counter, evSrc); var evSink5 = new EventSink2(counter, evSrc); Assert.AreEqual(5, counter.Instances); evSink1.CreateLinkToSourceGoodStyle(); evSink2.CreateLinkToSourceGoodStyle(); evSink3.CreateLinkToSourceGoodStyle(); evSink4.CreateLinkToSourceGoodStyle(); evSink5.CreateLinkToSourceGoodStyle(); evSink1 = null; evSink2 = null; evSink3 = null; evSink4 = null; evSink5 = null; GC.Collect(); System.Threading.Thread.Sleep(500); GC.Collect(); Assert.AreEqual(0, counter.Instances); // all instances should be claimed because we used a local variable to create the anonymous methode }
public void TestWithInstanceVariableInAnonymousMethod() { var counter = new InstanceCounter(); var evSrc = new EventSource(); var evSink1 = new EventSink2(counter, evSrc); var evSink2 = new EventSink2(counter, evSrc); var evSink3 = new EventSink2(counter, evSrc); var evSink4 = new EventSink2(counter, evSrc); var evSink5 = new EventSink2(counter, evSrc); Assert.AreEqual(5, counter.Instances); evSink1.CreateLinkToSourceBadStyle(); evSink2.CreateLinkToSourceBadStyle(); evSink3.CreateLinkToSourceBadStyle(); evSink4.CreateLinkToSourceBadStyle(); evSink5.CreateLinkToSourceBadStyle(); evSink1 = null; evSink2 = null; evSink3 = null; evSink4 = null; evSink5 = null; GC.Collect(); System.Threading.Thread.Sleep(500); GC.Collect(); Assert.AreEqual(5, counter.Instances); // the 5 instances could not be claimed because we used the instance member in CreateLinkToSource1, }