.NET MAUI应用内存占用攀升及PropertyChanged事件Handler未移除问题
.NET MAUI应用内存持续攀升,WeakEvent的RemoveHandler未触发导致引用堆积
问题场景
- 开发.NET MAUI应用时遭遇内存持续上涨问题,已制作复现示例项目
- 操作流程:点击DotnetBot图片打开BottomSheet,切换开关选中所有项后反复开关BottomSheet(不更改选择状态),内存占用会持续上升
- 不同场景的内存表现:
- 首次打开BottomSheet时,内存莫名跃升约2MB
- 若未选择任何项,反复开关BottomSheet时,内存仅首次跃升后保持稳定
尝试的解决方案
因项目引用非MAUI类库,无法直接使用WeakEventManager,遂在MemoryLeakExampleDatabase类库中实现WeakEvent类来管理INotifyPropertyChanged事件,在StoreSelection类中通过以下代码使用:
event PropertyChangedEventHandler? INotifyPropertyChanged.PropertyChanged { add => _propertyChangedEvent.AddHandler(value); remove => _propertyChangedEvent.RemoveHandler(value); }
异常现象与核心疑问
- 观察到
AddHandler被多次调用,但RemoveHandler从未执行,WeakEvent中的_handlers列表引用持续增长 - 核心疑问:
- 为什么PropertyChanged事件的RemoveHandler始终未被触发?
- 这是否属于.NET MAUI的Bug?
- TabView1ViewModel中对绑定到TabView1.xaml的CollectionView的
ObservableRangeCollection<StoreSelection> SelectedStoreItems执行Clear()和AddRange(...)操作是否存在问题?为何相关INotifyPropertyChanged通知的注册会持续增长?
内容的提问来源于stack exchange,提问作者OXO
相关产品推荐
相关产品推荐

