Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight MEF出口工厂<;T>;调用Dispose不进行Dispose_Silverlight_Prism_Mef - Fatal编程技术网

Silverlight MEF出口工厂<;T>;调用Dispose不进行Dispose

Silverlight MEF出口工厂<;T>;调用Dispose不进行Dispose,silverlight,prism,mef,Silverlight,Prism,Mef,使用Prism和MEF的Silverlight 5应用程序中的非共享对象存在内存泄漏问题,因此我尝试使用ExportFactory创建我的ViewModels,这应该是我所读到的解决方案。但是,在ExportLifetimeContext上调用Dispose也不会从内存中删除对象。下面的代码创建了DataEntryViewModel的一个实例,但是在两行之后释放ExportLifetimeContext的调用无效。有什么建议吗 [Export("DataEntry", typeof(UserCo

使用Prism和MEF的Silverlight 5应用程序中的非共享对象存在内存泄漏问题,因此我尝试使用ExportFactory创建我的ViewModels,这应该是我所读到的解决方案。但是,在ExportLifetimeContext上调用Dispose也不会从内存中删除对象。下面的代码创建了DataEntryViewModel的一个实例,但是在两行之后释放ExportLifetimeContext的调用无效。有什么建议吗

[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
也将被处置