【问题标题】:Memory leak when navigating between pages (UWP) [duplicate]在页面之间导航时内存泄漏(UWP)[重复]
【发布时间】:2020-09-06 10:13:35
【问题描述】:

我的应用中有一些页面。 当我的一个页面打开时while 循环创建 1000 个按钮(例如)。 在我在页面之间导航并返回第一页之后,对象(按钮)再次创建它。 我得到内存泄漏。我该如何解决这个问题?

public sealed partial class BlankPage1 : Page
{
    public BlankPage1()
    {
        this.InitializeComponent();

        int i = 0;
        while(i < 1000)
        {
            Button button = new Button();
            MainStack.Children.Add(button);
            i++;
        }
    }

    private void HyperlinkButton_Click(object sender, RoutedEventArgs e)
    {
        Frame.Navigate(typeof(BlankPage2));
    }
}

}

【问题讨论】:

  • MainStack的定义和容器是什么?您是如何得出这是实际泄漏的结论(调试器、诊断程序、工具)?
  • MainStack 是 StackPanel (System.Windows.Controls)。我怎么来的? ~ 每次打开页面都会使用 +20mb 的 RAM。垃圾收集器不起作用。内存使用持续存在
  • 我尝试了一些临时解决方案:我用this.NavigationCacheMode = Windows.UI.Xaml.Navigation.NavigationCacheMode.Enabled; 缓存了一个页面,并在页面加载时添加了一个检查:if (SomeClass.ObjectsExist == false) 然后CreateObjects() else //什么都不做。方法CreateObjectsSomeClass.ObjectsExist 更改为true。对吗?

标签: c# button while-loop uwp memory-leaks


【解决方案1】:

好吧,难怪你的内存有时会用完,因为每次打开“BlankPage1”页面时,每次都会开始循环。但是“旧”对象不会被 GC 删除。

尝试仅在应用程序开始时在 ViewModel 中创建对象,那么不应每次都创建对象。

如果您仍需要支持,请告诉我。

【讨论】:

  • 您能否展示如何使用 ViewModel 执行此操作的简单示例?
猜你喜欢
  • 1970-01-01
  • 2018-10-14
  • 2018-09-24
  • 2021-11-29
  • 1970-01-01
  • 2014-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多