diff --git a/MareSynchronos/Services/PlayerPerformanceService.cs b/MareSynchronos/Services/PlayerPerformanceService.cs index dd85eb4..76e75b9 100644 --- a/MareSynchronos/Services/PlayerPerformanceService.cs +++ b/MareSynchronos/Services/PlayerPerformanceService.cs @@ -17,6 +17,7 @@ public class PlayerPerformanceService private readonly ILogger _logger; private readonly MareMediator _mediator; private readonly PlayerPerformanceConfigService _playerPerformanceConfigService; + private Dictionary _warnedForPlayers = new(StringComparer.Ordinal); public PlayerPerformanceService(ILogger logger, MareMediator mediator, PlayerPerformanceConfigService playerPerformanceConfigService, FileCacheManager fileCacheManager, @@ -41,6 +42,7 @@ public class PlayerPerformanceService .Exists(uid => string.Equals(uid, pairHandler.Pair.UserData.Alias, StringComparison.Ordinal) || string.Equals(uid, pairHandler.Pair.UserData.UID, StringComparison.Ordinal))) return true; + var vramUsage = pairHandler.Pair.LastAppliedApproximateVRAMBytes; var triUsage = pairHandler.Pair.LastAppliedDataTris; @@ -51,6 +53,14 @@ public class PlayerPerformanceService bool exceedsVram = CheckForThreshold(config.WarnOnExceedingThresholds, config.VRAMSizeWarningThresholdMiB * 1024 * 1024, vramUsage, config.WarnOnPreferredPermissionsExceedingThresholds, isPrefPerm); + if (_warnedForPlayers.TryGetValue(pairHandler.Pair.UserData.UID, out bool hadWarning) && hadWarning) + { + _warnedForPlayers[pairHandler.Pair.UserData.UID] = exceedsTris || exceedsVram; + return true; + } + + _warnedForPlayers[pairHandler.Pair.UserData.UID] = exceedsTris || exceedsVram; + if (exceedsVram) { _mediator.Publish(new EventMessage(new Event(pairHandler.Pair.PlayerName, pairHandler.Pair.UserData, nameof(PlayerPerformanceService), EventSeverity.Warning,