Очистка памяти в Avalonia UI C#
Всем привет, у меня есть проект на фреймворке Avalonia, дополнительно использую Actipro и паттерн MVVM. Возник вопрос по очистке памяти при вызове метода Dipose у ViewModel.
У меня есть ObservableCollection, которая привязывается в ItemsControl через
ItemsSource="{Binding Lines, Mode=OneWay}". В проекте реализован DI-контенер и есть сервис по навигации ViewModel.
Вот сервис:
public async Task NavigateTo<T>() where T : ViewModelBase
{
if (_currentView is IDisposable disposable)
{
disposable.Dispose();
CurrentView = null;
}
// Создаём новый экземпляр через DI
var viewModel = _serviceProvider.GetRequiredService<T>();
CurrentView = viewModel;
// Настраиваем заголовок страницы и параметры меню
if (viewModel is AuthViewModel)
{
TitlePage = "Авторизация";
IsActiveToggleMenu = false;
}
else if (viewModel is HomeViewModel)
{
TitlePage = "Главная";
IsActiveToggleMenu = true;
}
else if (viewModel is EquipmentViewModel equipmentViewModel)
{
TitlePage = "Оборудование";
//Метод, который подгружает данные из БД
await equipmentViewModel.LoadLines();
}
else
{
TitlePage = viewModel.GetType().Name;
}
}
Получается, что при смене ViewModel я иду в DI и получаю нужный сервис. Далее вызываю метод Dispose у предыдущей ViewModel и устанавливаю CurrentView.
Вот тут то у меня и вопросы, если я очищаю объект во ViewModel:
private bool _disposed = false;
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (_disposed)
return;
if (disposing)
{
// Очистка управляемых ресурсов
IsTogglePreviewMenuOpen = false;
IsAddLineMenuOpen = false;
IsToggleEditMenuOpen = false;
Equipments.Clear();
Lines.Clear();
Equipments = null;
Lines = null;
OnPropertyChanged(nameof(Equipments));
OnPropertyChanged(nameof(Lines));
_controlService.SideMenuStateChanged -= OnSideMenuStateChanged!;
Log.Information("[EquipmentViewModel Dispose] Ресурсы очищены");
}
_disposed = true;
}
~EquipmentViewModel()
{
Dispose(false);
}
Вот мои коллекции:
[ObservableProperty]
private ObservableCollection<LineModel> _lines = [];
[ObservableProperty]
private ObservableCollection<EquipmentModel> _equipments = [];
Как мне сделать так чтобы UI больше не ссылался на эти объекты. Если например, 10 раз туда-сюда открывать и закрывать View, то к используемой памяти будет +5 МБ. Проблема не связана с не правильный запросами БД, я отключал все сервисы и проблема заключается скорее всего в UI. Надеюсь на помощь :)

