private void OnInstanceReleased(Burden burden) { using (@lock.ForWriting()) { if (instance2Burden.Remove(burden.Instance) == false) { return; } burden.Released -= OnInstanceReleased; } perfCounter.DecrementTrackedInstancesCount(); }
public void Dispose() { KeyValuePair <object, Burden>[] burdens; using (@lock.ForWriting()) { if (trackedComponentsDiagnostic != null) { trackedComponentsDiagnostic.TrackedInstancesRequested -= trackedComponentsDiagnostic_TrackedInstancesRequested; trackedComponentsDiagnostic = null; } burdens = instance2Burden.ToArray(); instance2Burden.Clear(); } // NOTE: This is relying on a undocumented behavior that order of items when enumerating Dictionary<> will be oldest --> latest foreach (var burden in burdens.Reverse()) { burden.Value.Released -= OnInstanceReleased; perfCounter.DecrementTrackedInstancesCount(); burden.Value.Release(); } }
public void DecrementTrackedInstancesCount() { counter.DecrementTrackedInstancesCount(); }