public void Remove() { var valueCollected = new booleanWrapper(); var keyCollected = new booleanWrapper(); var dict = new WeakReferenceDictionary <VisiblyGarbageCollectedObject, VisiblyGarbageCollectedObject>(ReferenceEqualityComparer.Instance); addKeyAndValueWrappersToDict(); GC.Collect(); // collects the key dict.Clean(); // removes the last reference to the value waitForGC(); Assert.IsTrue(keyCollected); Assert.IsFalse(valueCollected); GC.Collect(); // collects the value waitForGC(); Assert.IsTrue(valueCollected); void addKeyAndValueWrappersToDict() { dict.Add(VisiblyGarbageCollectedObject.Create(keyCollected), VisiblyGarbageCollectedObject.Create(valueCollected)); } }
static PooledObjectLocator() { ObjectPool = new WeakReferenceDictionary(); destroyTimer = new Timer(); destroyTimer.Interval = 60000; destroyTimer.Elapsed += new ElapsedEventHandler(Destroy); destroyTimer.Start(); }
static PooledInstanceLocator() { ServiceInstancePool = new WeakReferenceDictionary(); }