Silverlight MEF出口工厂<;T>;调用Dispose不进行Dispose
使用Prism和MEF的Silverlight 5应用程序中的非共享对象存在内存泄漏问题,因此我尝试使用ExportFactorySilverlight MEF出口工厂<;T>;调用Dispose不进行Dispose,silverlight,prism,mef,Silverlight,Prism,Mef,使用Prism和MEF的Silverlight 5应用程序中的非共享对象存在内存泄漏问题,因此我尝试使用ExportFactory创建我的ViewModels,这应该是我所读到的解决方案。但是,在ExportLifetimeContext上调用Dispose也不会从内存中删除对象。下面的代码创建了DataEntryViewModel的一个实例,但是在两行之后释放ExportLifetimeContext的调用无效。有什么建议吗 [Export("DataEntry", typeof(UserCo
[Export("DataEntry", typeof(UserControl)), PartCreationPolicy(CreationPolicy.NonShared)]
public partial class DataEntry
{
private readonly ExportFactory<DataEntryViewModel> _ExportFactory;
[ImportingConstructor]
public DataEntry(ExportFactory<DataEntryViewModel> exportFactory)
{
_ExportFactory = exportFactory;
var context = _ExportFactory.CreateExport();
DataContext = context.Value;
context.Dispose();
InitializeComponent();
}
}
[导出(“数据输入”,类型(用户控制)),PartCreationPolicy(CreationPolicy.NonShared)]
公共部分类数据项
{
私人只读出口工厂_ExportFactory;
[导入构造函数]
公共数据输入(ExportFactory ExportFactory)
{
_ExportFactory=ExportFactory;
var context=_ExportFactory.CreateExport();
DataContext=context.Value;
context.Dispose();
初始化组件();
}
}
Dispose不会从内存中删除对象。那是垃圾收集器的工作。按照dispose模式,您可以释放非托管资源
您在以下部分中所做的操作将导致出现问题:
var context = _ExportFactory.CreateExport();
DataContext = context.Value;
context.Dispose();
因为您正在处理context
,但在DataContext
上保留了对context.Value
的引用
在的文件中指出:
使用完ExportLifetimeContext后调用Dispose。
Dispose方法使ExportLifetimeContext处于不可用状态
国家。调用Dispose后,必须释放对的所有引用
ExportLifetimeContext,以便垃圾收集器可以回收
ExportLifetimeContext占用的内存
您可以做的是重写DataEntry类并在其中调用context.Dispose
。因此,当处置UserControl
时,ExportLifetimeContext
也将被处置