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");
        }
Beispiel #2
0
        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}");
        }