diff --git a/src/Avalonia.Base/Reactive/LightweightObservableBase.cs b/src/Avalonia.Base/Reactive/LightweightObservableBase.cs index 04759e314d..0688a4edb4 100644 --- a/src/Avalonia.Base/Reactive/LightweightObservableBase.cs +++ b/src/Avalonia.Base/Reactive/LightweightObservableBase.cs @@ -20,7 +20,7 @@ namespace Avalonia.Reactive private List>? _observers = new List>(); public bool HasObservers => _observers?.Count > 0; - + public IDisposable Subscribe(IObserver observer) { _ = observer ?? throw new ArgumentNullException(nameof(observer)); @@ -168,6 +168,8 @@ namespace Avalonia.Reactive for(int i = 0; i < count; i++) { observers[i].OnNext(value); + // Avoid memory leak by clearing the reference. + observers[i] = null!; } ArrayPool>.Shared.Return(observers);