more unnecessary perf improvements
This commit is contained in:
@@ -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())
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user