Browse Source

make internal stored Info a strcut to optimize memory (pr note)

pull/2297/head
Andrey Kunchev 7 years ago
parent
commit
b97b3c5935
  1. 15
      src/Avalonia.Layout/LayoutManager.cs

15
src/Avalonia.Layout/LayoutManager.cs

@ -17,7 +17,7 @@ namespace Avalonia.Layout
{
private class LayoutQueue<T> : IReadOnlyCollection<T>
{
private class Info
private struct Info
{
public bool Active;
public int Count;
@ -46,6 +46,7 @@ namespace Avalonia.Layout
if (_loopQueueInfo.TryGetValue(result, out var info))
{
info.Active = false;
_loopQueueInfo[result] = info;
}
return result;
@ -53,16 +54,12 @@ namespace Avalonia.Layout
public void Enqueue(T item)
{
if (!_loopQueueInfo.TryGetValue(item, out var info))
{
_loopQueueInfo[item] = info = new Info();
}
_loopQueueInfo.TryGetValue(item, out var info);
if (!info.Active && info.Count < _maxEnqueueCountPerLoop)
{
_inner.Enqueue(item);
info.Active = true;
info.Count++;
_loopQueueInfo[item] = new Info() { Active = true, Count = info.Count + 1 };
}
}
@ -83,9 +80,7 @@ namespace Avalonia.Layout
{
if (_shouldEnqueue(item.Key))
{
item.Value.Active = true;
item.Value.Count++;
_loopQueueInfo[item.Key] = item.Value;
_loopQueueInfo[item.Key] = new Info() { Active = true, Count = item.Value.Count + 1 };
_inner.Enqueue(item.Key);
}
}

Loading…
Cancel
Save