Exemple #1
0
        private static void AdjustHeuristic()
        {
            var collectionInfo     = GC.GetGCMemoryInfo(GCKind.Ephemeral);
            var pauseDurations     = collectionInfo.PauseDurations;
            var totalPauseDuration = TimeSpan.Zero;

            foreach (var pauseDuration in pauseDurations)
            {
                totalPauseDuration += pauseDuration;
            }

            if (totalPauseDuration > TimeSpan.Zero)
            {
                double timeRatio = Config.Garbage.EphemeralCollectPauseGoal / totalPauseDuration;

                var newTimeSpan = Config.Garbage.EphemeralCollectPeriod * timeRatio;
                newTimeSpan = Limits.Clamp(newTimeSpan);
                Config.Garbage.EphemeralCollectPeriod = newTimeSpan;
            }

            // general stats
            if (ShouldDump.Exchange(false))
            {
                Dump(collectionInfo);
            }
        }