gpt4 book ai didi

windows-phone-8 - 内存中 View 和 View 模型的多个实例

转载 作者:行者123 更新时间:2023-12-04 07:16:15 24 4
gpt4 key购买 nike

我们有一个 Windows Phone 8 应用程序,我们在其中使用 mvvm light 具有四个、五个 View 和大约相同数量的 View 模型。有一天,我们观察到应用程序的大小随着使用量的增加而增加,最终达到 100 MB 以上并最终崩溃。经过大量测试,我们能够理解的是,每次我们导航到一个 View 时,都会创建它的实例并存储在内存中。据观察, View 和 View 模型的所有实例都存在于内存中,从而增加了 ram 上的空间。我们还通过在 View 类和 View 模型上定义终结器来确认这一点,在关闭应用程序时,终结器被调用的次数与页面导航到的次数完全相同。我们将 View 的数据上下文绑定(bind)到 xaml 中的相应 View 模型。其中一个主视图有一个广告控件,因此如果用户多次导航到该 View ,大小会增加得非常快。如何解决这个问题。我无法理解的是,一旦用户按下后退按钮, View 就应该被销毁,但这并没有发生。任何帮助将非常感激。

最佳答案

我们通过在代码隐藏中添加以下代码行找到了解决方案。

protected override void OnNavigatedFrom(NavigationEventArgs e)
{
base.OnNavigatedFrom(e);
Messenger.Default.Unregister(this);

if (e.NavigationMode == NavigationMode.Back)
{
DataContext = null;
}
}

我们在上面所做的是取消注册页面的所有消息处理程序并将 DataContext 分配给 null。在我们的例子中,数据上下文仅在 xaml 中分配,消息处理程序在页面的 OnNavigatedTo 事件中注册。但尚不清楚的是,在从页面导航回来时,页面对象应该自动消失。是否应该将这行代码添加到所有 mvvm light 项目页面,如果是这样,那为什么不常见呢?

关于windows-phone-8 - 内存中 View 和 View 模型的多个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24392115/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com