C#典型的IDisposable模式在某些情况下不会导致资源泄漏

问题描述

下面是C#类的典型IDisposable实现,它同时具有托管和非托管资源。我的问题是,对于任何给定的对象,在某种情况下,是否存在〜DisposableObject()析构函数方法被调用之前的情况?并且如果可能的话,将不会将处置标志设置为false,并且如果将处置标志设置为false,则由于Dispose(bool)方法不会执行任何操作,因此托管资源将永远不会被处置。

public class DisposableObject : IDisposable
    {
        private bool disposed;
        private ManagedResource mgdRs;
        private UnmanagedResource unMgdRs;

        public DisposableObject()
        {
            mgdRs = new ManagedResource();
            unMgdRs = new UnmanagedResource();
        }

        ~DisposableObject()
        {
            this.Dispose(false);
        }
    
        public void Dispose()
        {    
             this.Dispose(true);
             GC.SuppressFinalize(this);       
        }

        protected virtual void Dispose(bool disposing)
        {
            if (!this.disposed)
            {
                if (disposing)
                {
                    // clean up managed resources
                    //call dispose on your member objects
                    mgdRs.Dispose();
                }

                // clean up unmanaged resources
                unMgdRs.Destroy();
                this.disposed = true;
            }
        }
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)