Example #1
0
        private static void CheckNDisposeObject(bool finalize, IChoDisposable disposableObj, Action <bool> disposeMethod)
        {
            if (disposableObj.IsDisposed)
            {
                return;
            }

            bool isDisposeSuccess = true;

            if (disposeMethod == null)
            {
                disposableObj.Dispose(finalize);
                //if (ChoType.HasMethod(disposableObj, "Dispose", new object[] { finalize }))
                //    ChoType.InvokeMethod(disposableObj, "Dispose", new object[] { finalize });
                //else
                //    isDisposeSuccess = false;
            }
            else
            {
                disposeMethod(finalize);
            }

            if (!finalize && isDisposeSuccess)
            {
                GC.SuppressFinalize(disposableObj);
            }
            else
            {
                AppDomain currentDomain = AppDomain.CurrentDomain;
                if (!currentDomain.IsFinalizingForUnload() && !Environment.HasShutdownStarted)
                {
                    ReportMemoryLeak(disposableObj);
                }
            }
        }
Example #2
0
        private static void ReportMemoryLeak(IChoDisposable target)
        {
            return;

            ChoGuard.ArgumentNotNull(target, "Target");

            if (target.IsDisposed)
            {
                return;
            }

            ChoDisposableObjectAttribute disposableObjectAttribute = ChoType.GetAttribute <ChoDisposableObjectAttribute>(target.GetType());

            if (disposableObjectAttribute == null || !disposableObjectAttribute.ContainsUnmanagedResources)
            {
                return;
            }

            AppDomain currentDomain = AppDomain.CurrentDomain;

            if (!currentDomain.IsFinalizingForUnload() &&
                !Environment.HasShutdownStarted)
            {
                ChoStringMsgBuilder msg = new ChoStringMsgBuilder(target.GetType().FullName);

                //Console.WriteLine("Object allocated at:");
                for (int index = 0; index < target.ObjectCreationStackTrace.FrameCount; ++index)
                {
                    StackFrame frame = target.ObjectCreationStackTrace.GetFrame(index);
                    msg.AppendLine(" {0}", frame.ToString());
                }

                //ChoProfile.DefaultContext.AppendLine(msg.ToString());
            }
        }
Example #3
0
 public static void NotDisposed(IChoDisposable obj)
 {
     ChoGuard.ArgumentNotNull(obj, "obj");
     if (obj.IsDisposed)
     {
         throw new ObjectDisposedException(obj.GetType().Name);
     }
 }
Example #4
0
        private static void Dispose(bool finalize, IChoDisposable disposableObj)
        {
            if (disposableObj.IsDisposed)
            {
                return;
            }
            disposableObj.IsDisposed = true;

            if (ChoType.HasMethod(disposableObj, "Dispose", new object[] { finalize }))
            {
                ChoType.InvokeMethod(disposableObj, "Dispose", new object[] { finalize });
            }

            //disposableObj.Dispose(finalize);
        }
Example #5
0
        public static void Dispose(IDisposable target, bool finalize)
        {
            ChoGuard.ArgumentNotNull(target, "Target");

            if (target is IChoDisposable)
            {
                IChoDisposable disposableObj = target as IChoDisposable;
                if (disposableObj is IChoSyncDisposable && ((IChoSyncDisposable)disposableObj).DisposableLockObj != null)
                {
                    lock (((IChoSyncDisposable)disposableObj).DisposableLockObj)
                    {
                        Dispose(finalize, disposableObj);
                    }
                }
                else
                {
                    Dispose(finalize, disposableObj);
                }
            }
            else
            {
                target.Dispose();
            }
        }
Example #6
0
 internal static bool IsDisposed(IChoDisposable obj)
 {
     ChoGuard.ArgumentNotNull(obj, "obj");
     return(obj.IsDisposed);
 }