You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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列表引用持续增长
  • 核心疑问:
    1. 为什么PropertyChanged事件的RemoveHandler始终未被触发?
    2. 这是否属于.NET MAUI的Bug?
    3. TabView1ViewModel中对绑定到TabView1.xaml的CollectionView的ObservableRangeCollection<StoreSelection> SelectedStoreItems执行Clear()和AddRange(...)操作是否存在问题?为何相关INotifyPropertyChanged通知的注册会持续增长?

内容的提问来源于stack exchange,提问作者OXO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 21:54:58