:(
This commit is contained in:
Dawid Bepierszcz
2025-11-13 01:40:50 +01:00
parent 4865b76262
commit 9723a4faee

View File

@@ -284,6 +284,15 @@ internal class PlayerManager
if (CS2_SimpleAdmin.DatabaseProvider == null)
return;
// Optimization: Get players once and avoid allocating anonymous types
var validPlayers = Helper.GetValidPlayers();
// Use ValueTuple instead of anonymous type - better performance and less allocations
var tempPlayers = new List<(string PlayerName, ulong SteamID, string? IpAddress, int? UserId, int Slot)>(validPlayers.Count);
foreach (var p in validPlayers)
{
tempPlayers.Add((p.PlayerName, p.SteamID, p.IpAddress, p.UserId, p.Slot));
}
var pluginInstance = CS2_SimpleAdmin.Instance;
var config = _config.OtherSettings; // Cache config access
@@ -291,8 +300,7 @@ internal class PlayerManager
{
try
{
// Always run cache and permission refresh, regardless of player count
// This ensures bans/mutes status changes are detected even when server is empty
// Run all expire tasks in parallel
var expireTasks = new[]
{
pluginInstance.BanManager.ExpireOldBans(),
@@ -320,11 +328,6 @@ internal class PlayerManager
if (pluginInstance.CacheManager == null)
return;
// Only check players if there are any online
var validPlayers = Helper.GetValidPlayers();
if (validPlayers.Count == 0)
return;
// Optimization: Cache ban type and multi-account check to avoid repeated config access
var banType = config.BanType;
var checkMultiAccounts = config.CheckMultiAccountsByIp;
@@ -332,7 +335,7 @@ internal class PlayerManager
var bannedPlayers = new List<(string PlayerName, ulong SteamID, string? IpAddress, int? UserId, int Slot)>();
// Manual loop instead of LINQ - better performance
foreach (var player in validPlayers)
foreach (var player in tempPlayers)
{
var playerName = player.PlayerName;
var steamId = player.SteamID;
@@ -348,7 +351,7 @@ internal class PlayerManager
if (isBanned)
{
bannedPlayers.Add((playerName, steamId, ip, player.UserId, player.Slot));
bannedPlayers.Add(player);
}
}
@@ -369,8 +372,8 @@ internal class PlayerManager
if (config.TimeMode == 0)
{
// Optimization: Manual projection instead of LINQ
var onlinePlayers = new List<(ulong, int?, int)>(validPlayers.Count);
foreach (var player in validPlayers)
var onlinePlayers = new List<(ulong, int?, int)>(tempPlayers.Count);
foreach (var player in tempPlayers)
{
onlinePlayers.Add((player.SteamID, player.UserId, player.Slot));
}