我有4种不同的视图,有不同的操作。我正在使用DateTemplate来创建视图
<DateTemplate DateType={X:Type HomeViewModel}" >
<HomeView>
</DateTemplate>
<DateTemplate DateType={X:Type DeviceDateViewModel}" >
<DeviceDateView>
</DateTemplate>
我有ContentControl,所有ViewModel都绑定到Content属性,比如说“ActiveView”
我创建了所有ViewModel并保存在字典中。当我想要更改视图时,我只是将ActiveView分配给我想要显示的新视图。
void ActiveteView(ViewType viewType)
{
ActiveView = GetViewFromDictionary(viewType);
}
我们的一个控件不支持DataBinding,所以我在View的后面代码中创建了一些新的控件。
我的问题是:当我更改ActiveView时,它会在ContentControl中创建新的View和display。因此,我遇到了问题。我的旧视图仍在记忆中。如何摧毁他们?
此时,我们无法改变设计。我们处于这样的境地。
答案 0 :(得分:0)
如果vm在字典中,那么垃圾收集将不会收集它。关于GC什么时候收集一个对象有很多规则,我自己必须偶尔刷新自己的话题。 All about Garbage collection
有很多方法可以强制进行垃圾收集,但恕我直言可以避免使用managed code的好处。一般来说,只要你不坚持对该对象的引用,GC最终应该收集它。您可以强制进行此类收集,但这表明您的设计存在问题。
根据MSDN:
“可以通过调用Collect强制进行垃圾回收,但大部分时间都应该避免这种情况,因为它可能会产生性能问题。”