我创建了可以使用 PRISM MEF 选择区域内不同游戏的游戏管理器。“MainRegion”中有静态外壳和动态内容。每个游戏都是独立的模块(组件),当我获得实例时,它为每个游戏分配了大约 20-30 MB。
每个游戏我都有这样的组件:
- 主视图 [CreationPolicy.Shared]
- View1 [CreationPolicy.Shared]
- ViewN [CreationPolicy.Shared]
- MainViewModel [CreationPolicy.Shared]
- ViewModel1 [CreationPolicy.Shared]
- ViewModelN [CreationPolicy.Shared]
通过调用创建的每个“视图”(main、1st、2nd ...)
_serviceLocator.GetInstance<MainView>();
每个“视图”具有以下属性
[Import(AllowRecomposition = false)]
public MainViewModel ViewModel //example for MainView
{
get { return this.DataContext as MainViewModel; }
set { this.DataContext = value; }
}
当我想更改游戏时,我从中删除MainView
,MainRegion
但它不会创建新实例,因为PartCreationPolicy
设置为Shared
,但如果我使用NonShared
它,则在删除实例后会出现内存泄漏。
如何在我的应用程序中修复此内存泄漏?