Esempio n. 1
0
        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);
            });
        }
Esempio n. 2
0
        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);
            });
        }