public void Clean() { var c = new WeakList <object>(); object x = new object(); using (NoGCRegion.Enter(1000)) { AddCollectableItems(c, 3); c.InsertFirst(x); c.InsertAfter(x, x); c.InsertBefore(x, x); Assert.AreEqual(6, c.AddCountSinceLastClean); Assert.AreEqual(6, c.UnsafeCount); Assert.IsTrue(c.Take(3).SequenceEqual(new[] { x, x, x })); } Helpers.CollectAndWait(); c.Clean(); Assert.AreEqual(0, c.AddCountSinceLastClean); Assert.AreEqual(3, c.UnsafeCount); c.Remove(x); c.Remove(x); Assert.AreEqual(1, c.UnsafeCount); GC.KeepAlive(x); }
private static void Update() { float dt = Time.deltaTime; if (_runningTimers.Count > 0) { _runningTimers.Clean(); foreach (var timer in _runningTimers) { if (timer != null && timer.IsRunning) { timer.UpdateTimer(dt); } } } }