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); } }