Performance wp8清除可观察到的收集速度缓慢

Performance wp8清除可观察到的收集速度缓慢,performance,mvvm,windows-phone-8,observablecollection,Performance,Mvvm,Windows Phone 8,Observablecollection,我所做的: 我在场景之间切换。其中大多数都绑定到某些viewmodels。这一个绑定到一个observableCollection,只有一个对象。当我离开时,我想清除集合,以确保它在下载时加载新的集合,而不显示旧数据或其他内容 我在按backkeypress后调用clear函数,因此它会立即被删除: void PageBackKeyPress(object sender, System.ComponentModel.CancelEventArgs e) { App.ViewModel.J

我所做的: 我在场景之间切换。其中大多数都绑定到某些viewmodels。这一个绑定到一个observableCollection,只有一个对象。当我离开时,我想清除集合,以确保它在下载时加载新的集合,而不显示旧数据或其他内容

我在按backkeypress后调用clear函数,因此它会立即被删除:

void PageBackKeyPress(object sender, System.ComponentModel.CancelEventArgs e)
{
    App.ViewModel.JobDetail.Clear();
}
我用
JobDetail[0]尝试了它
作业详细信息.RemoveAt(0)但效果仍然相同:
它有点冻结,然后在20秒后运行。如果我在带着backkey离开时这么做,它似乎不会对backkey做出反应,然后立即执行我所有的backkey点击(大部分关闭应用程序)。如果我在加载前尝试清除,我会看到一个空白的白色屏幕,在相同的20秒后,它会显示场景,然后开始下载(这需要更多的秒)

我尝试加载的ViewModel包含大约15个字符串和3个短字符串列表(最多5个元素)。 对于其他ViewModel,我有50个元素,每个元素大约有10个字符串和相同的3个字符串列表,离开时清除列表没有任何问题

有什么想法吗


我读到我使用的VS2013经常发生这种情况。但如果我打开或关闭调试,使用其他模拟器或真实设备,这并没有任何区别。同样的问题。

好的,解决方案很简单:

void PageBackKeyPress(object sender, System.ComponentModel.CancelEventArgs e)
{
    DataContext = null;
    App.ViewModel.JobDetail.Clear(); // delete previous search
}
在其他类中,我没有将DataContext设置为null,但不知何故,它工作得非常完美。在这个类中,删除绑定的数据会产生巨大的性能问题。就像我说的,大约延迟20秒,而正常情况下一切都很好,很快


希望这对以后的其他人有所帮助:)

是否有理由不为每个页面使用单独的视图模型实例?正如RowlandShaw所指出的,您确实不应该为所有页面使用静态视图模型,但这需要大规模重构。请尝试
App.ViewModel.JobDetail=newobservetecollection()
,这可能会有所帮助。我就是这样做的。但我想在每次访问时重新加载此页面。这就是我在进入或离开时尝试删除viewmodel的原因。对于其他页面,我尝试了一些方法,每次内容发生变化时我都会这样做:我在按下backkey后删除,下次再次输入时加载。工作完美无瑕。在这里,它需要20秒,而它只是一个元素。这可能是原因吗?因为我删除了元素[0],它释放了整个viewmodel的内存还是什么?