more unnecessary perf improvements

This commit is contained in:
rootdarkarchon
2023-03-27 16:10:06 +02:00
parent fba83f0602
commit 3fcd843a2d
2 changed files with 12 additions and 9 deletions

View File

@@ -47,7 +47,7 @@ public class OnlinePlayerManager : DisposableMediatorSubscriberBase
var playerCharacters = _dalamudUtil.GetPlayerCharacters(); var playerCharacters = _dalamudUtil.GetPlayerCharacters();
var chars = _pairManager.FindAllPairs(playerCharacters); var chars = _pairManager.FindAllPairs(playerCharacters);
var newVisiblePlayers = (from pChar in chars.Where(p => p.Pair != null && p.Pair.InitializePair(p.Character.Name.ToString())) var newVisiblePlayers = (from pChar in chars.Where(p => p.Pair.InitializePair(p.Character.Name.ToString()))
select pChar.Pair.UserData).ToList(); select pChar.Pair.UserData).ToList();
if (newVisiblePlayers.Any()) if (newVisiblePlayers.Any())

View File

@@ -21,9 +21,9 @@ public sealed class PairManager : DisposableMediatorSubscriberBase
private readonly ConcurrentDictionary<GroupData, GroupFullInfoDto> _allGroups = new(GroupDataComparer.Instance); private readonly ConcurrentDictionary<GroupData, GroupFullInfoDto> _allGroups = new(GroupDataComparer.Instance);
private readonly MareConfigService _configurationService; private readonly MareConfigService _configurationService;
private readonly DalamudContextMenu _dalamudContextMenu; private readonly DalamudContextMenu _dalamudContextMenu;
private readonly Dictionary<string, Pair> _indexedPairs = new(StringComparer.Ordinal);
private readonly Func<Pair> _pairFactory; private readonly Func<Pair> _pairFactory;
private Lazy<List<Pair>> _directPairsInternal; private Lazy<List<Pair>> _directPairsInternal;
private Lazy<Dictionary<GroupFullInfoDto, List<Pair>>> _groupPairsInternal; private Lazy<Dictionary<GroupFullInfoDto, List<Pair>>> _groupPairsInternal;
public PairManager(ILogger<PairManager> logger, Func<Pair> pairFactory, public PairManager(ILogger<PairManager> logger, Func<Pair> pairFactory,
@@ -91,14 +91,9 @@ public sealed class PairManager : DisposableMediatorSubscriberBase
RecreateLazy(); RecreateLazy();
} }
public List<(PlayerCharacter Character, Pair? Pair)> FindAllPairs(List<PlayerCharacter> playerCharacters) public List<(PlayerCharacter Character, Pair Pair)> FindAllPairs(List<PlayerCharacter> playerCharacters)
{ {
var indexedPairs = new Dictionary<string, Pair>(StringComparer.Ordinal); return playerCharacters.Select(p => (p, _indexedPairs.TryGetValue(p.GetHash256(), out var pair) ? pair : null)).Where(p => p.Item2 != null).ToList()!;
foreach (var pair in _allClientPairs.Values)
{
indexedPairs[pair.GetPlayerNameHash()] = pair;
}
return playerCharacters.Select(p => (p, indexedPairs.TryGetValue(p.GetHash256(), out var pair) ? pair : null)).ToList();
} }
public Pair? FindPair(PlayerCharacter? pChar) public Pair? FindPair(PlayerCharacter? pChar)
@@ -353,6 +348,14 @@ public sealed class PairManager : DisposableMediatorSubscriberBase
private void DalamudUtilOnDelayedFrameworkUpdate() private void DalamudUtilOnDelayedFrameworkUpdate()
{ {
_indexedPairs.Clear();
foreach (var pair in _allClientPairs.Values.Where(p => string.IsNullOrEmpty(p.PlayerName)))
{
var hash = pair.GetPlayerNameHash();
if (string.IsNullOrEmpty(hash)) continue;
_indexedPairs[hash] = pair;
}
foreach (Pair pair in _allClientPairs.Select(p => p.Value).Where(p => p.HasCachedPlayer).ToList()) foreach (Pair pair in _allClientPairs.Select(p => p.Value).Where(p => p.HasCachedPlayer).ToList())
{ {
if (!pair.CachedPlayerExists) if (!pair.CachedPlayerExists)