コード例 #1
0
        private static void RunCallFinalizerWithSuppressedAndReRegistered(FinalizerCalleeHolder holder)
        {
            var implemented = new FinalzerImplemented(holder);

            GC.SuppressFinalize(implemented);
            GC.ReRegisterForFinalize(implemented);
        }
コード例 #2
0
        public static int ReRegisterForFinalize()
        {
            var holder = new FinalizerCalleeHolder();

            RunCallFinalizerWithSuppressedAndReRegistered(holder);

            GC.Collect();
            GC.WaitForPendingFinalizers();

            return(holder.Called);
        }
コード例 #3
0
        public static int DontCallFinalizerByCollectWithPinned()
        {
            var holder = new FinalizerCalleeHolder();

            RunDontCallFinalizerWithPinned(holder);

            GC.Collect();
            GC.WaitForPendingFinalizers();

            return(holder.Called);
        }
コード例 #4
0
        public static int CallFinalizerByCollectWithGeneration(int generation)
        {
            var holder = new FinalizerCalleeHolder();

            RunCallFinalizer(holder);

            GC.Collect(generation);
            GC.WaitForPendingFinalizers();

            return(holder.Called);
        }
コード例 #5
0
        public static int CallFinalizerByCollectWithReRegister()
        {
            var holder = new FinalizerCalleeHolder();

            RunCallFinalizerWithReRegister(holder);

            GC.Collect();
            GC.WaitForPendingFinalizers();

            if (holder.Called != 1)
            {
                return(holder.Called);
            }

            GC.Collect();
            GC.WaitForPendingFinalizers();

            return(holder.Called);
        }
コード例 #6
0
 private static void RunCallFinalizerWithReRegister(FinalizerCalleeHolder holder)
 {
     var implemented = new FinalzerImplementedWithReRegister(holder);
 }
コード例 #7
0
 private static void RunDontCallFinalizerWithPinned(FinalizerCalleeHolder holder)
 {
     var implemented = new FinalzerImplementedWithPinned(holder);
     var handle      = GCHandle.Alloc(implemented, GCHandleType.Pinned);
 }