private static void RunCallFinalizerWithSuppressedAndReRegistered(FinalizerCalleeHolder holder) { var implemented = new FinalzerImplemented(holder); GC.SuppressFinalize(implemented); GC.ReRegisterForFinalize(implemented); }
public static int ReRegisterForFinalize() { var holder = new FinalizerCalleeHolder(); RunCallFinalizerWithSuppressedAndReRegistered(holder); GC.Collect(); GC.WaitForPendingFinalizers(); return(holder.Called); }
public static int DontCallFinalizerByCollectWithPinned() { var holder = new FinalizerCalleeHolder(); RunDontCallFinalizerWithPinned(holder); GC.Collect(); GC.WaitForPendingFinalizers(); return(holder.Called); }
public static int CallFinalizerByCollectWithGeneration(int generation) { var holder = new FinalizerCalleeHolder(); RunCallFinalizer(holder); GC.Collect(generation); GC.WaitForPendingFinalizers(); return(holder.Called); }
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); }
private static void RunCallFinalizerWithReRegister(FinalizerCalleeHolder holder) { var implemented = new FinalzerImplementedWithReRegister(holder); }
private static void RunDontCallFinalizerWithPinned(FinalizerCalleeHolder holder) { var implemented = new FinalzerImplementedWithPinned(holder); var handle = GCHandle.Alloc(implemented, GCHandleType.Pinned); }