public void WeakCollection() { "添加元素,但只有 1 个被强引用,于是 GC 后只剩 1 个元素。".Test(() => { // Arrange var collection = new WeakCollection <object>(); // Action collection.Add(new object()); var a = new object(); collection.Add(a); GC.Collect(); // Assert Assert.AreEqual(1, collection.TryGetItems(x => true).Length); }); "移除元素,被强引用的元素也被移除,于是 GC 后没有元素了。".Test(() => { // Arrange var collection = new WeakCollection <object>(); // Action collection.Add(new object()); var a = new object(); collection.Add(a); collection.Remove(a); GC.Collect(); // Assert Assert.AreEqual(0, collection.TryGetItems(x => true).Length); }); }
public void WeakCollection() { "添加元素,但只有 1 个被强引用,于是 GC 后只剩 1 个元素。".Test(() => { // Arrange var collection = new WeakCollection <object>(); // Action AddNewObject(collection); var a = AddNewObjectAndReturn(collection); GC.Collect(); // Assert Assert.AreEqual(1, collection.TryGetItems(x => true).Length); // 必须在验证之后再使用一下变量,否则可能被提前回收。 Console.WriteLine(a); }); "移除元素,被强引用的元素也被移除,于是 GC 后没有元素了。".Test(() => { // Arrange var collection = new WeakCollection <object>(); // Action AddNewObject(collection); var a = AddNewObjectAndReturn(collection); collection.Remove(a); GC.Collect(); // Assert Assert.AreEqual(0, collection.TryGetItems(x => true).Length); }); }