public static void TestHandleCollector() { Tuple <int, int, int> intialGcState = new Tuple <int, int, int>( GC.CollectionCount(0), GC.CollectionCount(1), GC.CollectionCount(2)); HandleCollector lowLimitCollector = new HandleCollector("LowLimit.Collector", LowLimitSize); for (int i = 0; i < LowLimitSize + 1; ++i) { HandleLimitTester hlt = new HandleLimitTester(lowLimitCollector); } Tuple <int, int, int> postLowLimitState = new Tuple <int, int, int>( GC.CollectionCount(0), GC.CollectionCount(1), GC.CollectionCount(2)); Assert.True(intialGcState.Item1 + intialGcState.Item2 + intialGcState.Item3 < postLowLimitState.Item1 + postLowLimitState.Item2 + postLowLimitState.Item3, "Low limit handle did not trigger a GC"); HandleCollector highLimitCollector = new HandleCollector("HighLimit.Collector", HighLimitSize); for (int i = 0; i < HighLimitSize + 10; ++i) { HandleLimitTester hlt = new HandleLimitTester(highLimitCollector); } Tuple <int, int, int> postHighLimitState = new Tuple <int, int, int>( GC.CollectionCount(0), GC.CollectionCount(1), GC.CollectionCount(2)); Assert.True(postLowLimitState.Item1 + postLowLimitState.Item2 + postLowLimitState.Item3 < postHighLimitState.Item1 + postHighLimitState.Item2 + postHighLimitState.Item3, "High limit handle did not trigger a GC"); }
public static void TestHandleCollector() { (int gen0, int gen1, int gen2)initialGcState = (GC.CollectionCount(0), GC.CollectionCount(1), GC.CollectionCount(2)); HandleCollector lowLimitCollector = new HandleCollector("LowLimit.Collector", LowLimitSize); for (int i = 0; i < LowLimitSize + 1; ++i) { HandleLimitTester hlt = new HandleLimitTester(lowLimitCollector); } (int gen0, int gen1, int gen2)postLowLimitState = (GC.CollectionCount(0), GC.CollectionCount(1), GC.CollectionCount(2)); Assert.True(initialGcState.gen0 + initialGcState.gen1 + initialGcState.gen2 < postLowLimitState.gen0 + postLowLimitState.gen1 + postLowLimitState.gen2, "Low limit handle did not trigger a GC"); HandleCollector highLimitCollector = new HandleCollector("HighLimit.Collector", HighLimitSize); for (int i = 0; i < HighLimitSize + 10; ++i) { HandleLimitTester hlt = new HandleLimitTester(highLimitCollector); } (int gen0, int gen1, int gen2)postHighLimitState = (GC.CollectionCount(0), GC.CollectionCount(1), GC.CollectionCount(2)); Assert.True(postLowLimitState.gen0 + postLowLimitState.gen1 + postLowLimitState.gen2 < postHighLimitState.gen0 + postHighLimitState.gen1 + postHighLimitState.gen2, "High limit handle did not trigger a GC"); }
public static void TestHandleCollector() { Tuple<int, int, int> intialGcState = new Tuple<int, int, int>( GC.CollectionCount(0), GC.CollectionCount(1), GC.CollectionCount(2)); HandleCollector lowLimitCollector = new HandleCollector("LowLimit.Collector", LowLimitSize); for (int i = 0; i < LowLimitSize + 1; ++i) { HandleLimitTester hlt = new HandleLimitTester(lowLimitCollector); } Tuple<int, int, int> postLowLimitState = new Tuple<int, int, int>( GC.CollectionCount(0), GC.CollectionCount(1), GC.CollectionCount(2)); Assert.True(intialGcState.Item1 + intialGcState.Item2 + intialGcState.Item3 < postLowLimitState.Item1 + postLowLimitState.Item2 + postLowLimitState.Item3, "Low limit handle did not trigger a GC"); HandleCollector highLimitCollector = new HandleCollector("HighLimit.Collector", HighLimitSize); for (int i = 0; i < HighLimitSize + 10; ++i) { HandleLimitTester hlt = new HandleLimitTester(highLimitCollector); } Tuple<int, int, int> postHighLimitState = new Tuple<int, int, int>( GC.CollectionCount(0), GC.CollectionCount(1), GC.CollectionCount(2)); Assert.True(postLowLimitState.Item1 + postLowLimitState.Item2 + postLowLimitState.Item3 < postHighLimitState.Item1 + postHighLimitState.Item2 + postHighLimitState.Item3, "High limit handle did not trigger a GC"); }
public static void TestHandleCollector() { (int gen0, int gen1, int gen2)initialGcState = (GC.CollectionCount(0), GC.CollectionCount(1), GC.CollectionCount(2)); int initSum = initialGcState.gen0 + initialGcState.gen1 + initialGcState.gen2; HandleCollector lowLimitCollector = new HandleCollector("LowLimit.Collector", LowLimitSize); for (int i = 0; i < LowLimitSize + 1; ++i) { HandleLimitTester hlt = new HandleLimitTester(lowLimitCollector); Assert.True(lowLimitCollector.Count <= i + 1); } // HandleLimitTester does the decrement on the HandleCollector during finalization, so we wait for pending finalizers. GC.WaitForPendingFinalizers(); (int gen0, int gen1, int gen2)postLowLimitState = (GC.CollectionCount(0), GC.CollectionCount(1), GC.CollectionCount(2)); int postLowLimitSum = postLowLimitState.gen0 + postLowLimitState.gen1 + postLowLimitState.gen2; Assert.True(initSum < postLowLimitSum, $"Low limit handle did not trigger a GC: {initSum} < {postLowLimitSum}"); HandleCollector highLimitCollector = new HandleCollector("HighLimit.Collector", HighLimitSize); for (int i = 0; i < HighLimitSize + 10; ++i) { HandleLimitTester hlt = new HandleLimitTester(highLimitCollector); Assert.True(highLimitCollector.Count <= i + 1); } // HandleLimitTester does the decrement on the HandleCollector during finalization, so we wait for pending finalizers. GC.WaitForPendingFinalizers(); (int gen0, int gen1, int gen2)postHighLimitState = (GC.CollectionCount(0), GC.CollectionCount(1), GC.CollectionCount(2)); int postHighLimitSum = postHighLimitState.gen0 + postHighLimitState.gen1 + postHighLimitState.gen2; Assert.True(postLowLimitSum < postHighLimitSum, $"High limit handle did not trigger a GC: {postLowLimitSum} < {postHighLimitSum}"); }