【发布时间】:2013-04-19 17:39:22
【问题描述】:
我创建了可以使用 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; }
}
当我想改变游戏时,我从MainRegion 中删除了MainView,但它不会创建新实例,因为PartCreationPolicy 设置为Shared,但如果我使用NonShared 它有内存删除实例后泄漏。
如何在我的应用程序中修复此内存泄漏?
【问题讨论】:
-
内存泄漏是什么意思?是您删除了它并且实例没有被破坏还是?
-
instance destoryed,但 TaskManager 显示使用的内存没有减少,所以如果我在应用程序使用 50 MB 内存时选择游戏,但如果我选择游戏更多次(去到菜单-选择游戏-转到菜单-选择游戏-...-...-等等)它会“吃掉”越来越多的内存