向应用程序添加选项卡 我意识到我的子视图在我从Region
中删除后没有被释放(最终确定(。
regionManager.Regions[regionName].Remove(tabItem.Content);
每次关闭选项卡并重新打开它时,都会正确创建一个新实例,但旧实例会保持打开状态,直到我关闭应用程序。通过Finalizer
断点检查它。这会导致我的应用程序不释放Region
并在RegionManager
尝试创建已存在的区域时崩溃。
甚至
[RegionMemberLifetime(KeepAlive = false)]
将把它从Region
中移除,但物体仍然活着。
我有一个类似的问题,今天早上我刚刚解决了它。
在使用区域管理器添加新区域之前,请使用以下命令检查它是否尚不存在:
this.regionManager.Regions.ContainsRegionWithName("Your region name")
然后,当我从区域中删除视图时,我只是调用垃圾收集器 GC。Collect(( 方法来"释放"已删除的视图和释放内存。
但是,请确保在视图上使用属性 [RegionMemberLifetime(KeepAlive = false(]。
有关更多信息,请参阅此帖子
编辑
另一种解决方案,使用一次性模式,我也用于某些视图。
在我的视图实现 IDisposable 接口的地方,该方法如下所示:
public void Dispose()
{
GC.SuppressFinalize(this);
}
之后,当您从区域中删除视图时,只需调用 Dispose 方法:
myRegion.Deactivate(view);
myRegion.Remove(view);
var disposable = view as IDisposable;
if (disposable != null)
{
disposable.Dispose();
}
请注意,我使用的是 mvvm 模式,我不必释放任何其他托管对象,否则,如果您的视图中有一些托管对象,请在此处查看有关 IDisposable 模式的更多信息