Skip to content

Commit 3db5555

Browse files
committed
perf: Dispose HashtableEx to return memory to the pool
1 parent af1e5e7 commit 3db5555

9 files changed

+26
-0
lines changed

src/Uno.UI/UI/Xaml/DependencyObjectStore.AncestorsDictionary.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,9 @@ internal void Set(object key, bool isAncestor)
4949

5050
internal void Clear()
5151
=> _entries.Clear();
52+
53+
internal void Dispose()
54+
=> _entries.Dispose();
5255
}
5356
}
5457
}

src/Uno.UI/UI/Xaml/DependencyObjectStore.Binder.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,7 @@ private void BinderDispose()
257257
}
258258

259259
_properties.Dispose();
260+
_childrenBindableMap.Dispose();
260261
}
261262

262263
private void OnDataContextChanged(object? providedDataContext, object? actualDataContext, DependencyPropertyValuePrecedences precedence)

src/Uno.UI/UI/Xaml/DependencyObjectStore.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1546,6 +1546,10 @@ void Propagate(DependencyObjectStore store)
15461546
}
15471547
}
15481548
}
1549+
1550+
// Explicit dispose to return HashtableEx's internal array to the pool
1551+
// without having to rely on GC's finalizers.
1552+
ancestors.Dispose();
15491553
}
15501554

15511555
private static bool IsAncestor(DependencyObject? instance, AncestorsDictionary map, object ancestor)

src/Uno.UI/UI/Xaml/DependencyProperty.Dictionary.FrameworkPropertiesForType.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ internal void Add(_Key key, DependencyProperty[] value)
3939
=> _entries.Add(key, value);
4040

4141
internal void Clear() => _entries.Clear();
42+
43+
internal void Dispose()
44+
=> _entries.Dispose();
4245
}
4346
}
4447
}

src/Uno.UI/UI/Xaml/DependencyProperty.Dictionary.NameToProperty.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ internal void Remove(PropertyCacheEntry propertyCacheEntry)
5050
internal int Count => _entries.Count;
5151

5252
internal void Clear() => _entries.Clear();
53+
54+
internal void Dispose()
55+
=> _entries.Dispose();
5356
}
5457
}
5558
}

src/Uno.UI/UI/Xaml/DependencyProperty.Dictionary.PropertiesRegistry.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,9 @@ private bool TryGetTypeTable(Type type, out HashtableEx? table)
7171
table = null;
7272
return false;
7373
}
74+
75+
internal void Dispose()
76+
=> _entries.Dispose();
7477
}
7578
}
7679
}

src/Uno.UI/UI/Xaml/DependencyProperty.Dictionary.TypeNullableDictionary.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ internal void Add(Type key, bool isNullable)
4242

4343
internal void Clear()
4444
=> _entries.Clear();
45+
46+
internal void Dispose()
47+
=> _entries.Dispose();
4548
}
4649
}
4750
}

src/Uno.UI/UI/Xaml/DependencyProperty.Dictionary.TypeToProperties.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ internal void Add(Type key, DependencyProperty[] dependencyProperty)
3030

3131
internal void Clear()
3232
=> _entries.Clear();
33+
34+
internal void Dispose()
35+
=> _entries.Dispose();
3336
}
3437
}
3538
}

src/Uno.UI/UI/Xaml/PropertyMetadataDictionary.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,5 +59,8 @@ internal PropertyMetadata FindOrCreate(Type ownerType, CreationHandler createHan
5959

6060
return metadata;
6161
}
62+
63+
internal void Dispose()
64+
=> _table.Dispose();
6265
}
6366
}

0 commit comments

Comments
 (0)