// Copyright (C) Stichting Deltares 2025. All rights reserved. // // This file is part of the application DAM - UI. // // DAM - UI is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // // All names, logos, and references to "Deltares" are registered trademarks of // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. using System; namespace Deltares.Dam.Tests.TestUtils { /// /// Class used to detecting if an object is alive or not. /// Used to prevent keeping the object /// from being garbage collected. /// /// http://geekswithblogs.net/HouseOfBilz/archive/2008/11/11/writing-tests-to-catch-memory-leaks-in-.net.aspx /// public class ObjectLeakMonitor { private readonly WeakReference refereceToObject; /// /// Initializes a new instance of the class, /// creating a to the monitored object. /// /// The object to monitor. public ObjectLeakMonitor(object objectToMonitor) { refereceToObject = new WeakReference(objectToMonitor); MonitoredObjectType = objectToMonitor.GetType(); } /// /// Gets the of the monitored object. /// public Type MonitoredObjectType { get; } /// /// Performs garbage collection and checks if the object still exists. /// /// True if the monitored object exists, false otherwise. public bool ObjectIsAlive() { GC.Collect(); GC.WaitForPendingFinalizers(); return refereceToObject.IsAlive; } } }