C# UWP导航内存泄漏

C# UWP导航内存泄漏,c#,memory-leaks,uwp,navigation,C#,Memory Leaks,Uwp,Navigation,我们注意到我们的UWP应用程序存在内存泄漏。我调查了它,发现当导航到新页面时,内存会变得更高,即使在GC运行时,内存似乎也不会下降很多 我制作了一个小复制品,由两页组成: 主页 公共密封部分类主页面:第页 { 公共主页() { this.InitializeComponent(); } 私有无效导航按钮单击(对象发送者,路由目标) { mainFrame.Navigate(typeof(Page1),null,newwindows.UI.Xaml.Media.Animation.DrillI

我们注意到我们的UWP应用程序存在内存泄漏。我调查了它,发现当导航到新页面时,内存会变得更高,即使在GC运行时,内存似乎也不会下降很多

我制作了一个小复制品,由两页组成:

  • 主页
  • 
    
    公共密封部分类主页面:第页
    {
    公共主页()
    {
    this.InitializeComponent();
    }
    私有无效导航按钮单击(对象发送者,路由目标)
    {
    mainFrame.Navigate(typeof(Page1),null,newwindows.UI.Xaml.Media.Animation.DrillInNavigationTransitionInfo());
    }
    }
    
  • 第1页:
  • 
    
    公共密封部分类第1页:第
    {
    公共页1()
    {
    this.InitializeComponent();
    }
    ~Page1()
    {
    Debug.WriteLine(“页面失效:(”);
    }
    }
    
    完整的源代码可在上获得

    你可以看到这个复制品

    我也尝试过设置为false,但没有帮助

    我做错了什么


    我使用的是Windows 1803,因为我没有最新的1809,但我认为它的工作原理是一样的

    在第1页的代码中:

     protected override void OnNavigatedFrom(NavigationEventArgs e)
        {
            base.OnNavigatedFrom(e);
    
            System.GC.Collect();
        }
    

    这是检查应用程序是否必须处理页面的另一种方法。它可以正常工作。

    感谢您抽出时间。您是说我应该打电话给GC.Cllect()吗在每个页面上,或者只是这样做,看看页面是否被正确处理?我试过了,事实上,内存消耗的增长速度要慢得多,但它仍然在增加,而且似乎没有被回收。我会在其他应用程序中试过,看看它是否解决了问题。虽然说实话,我不喜欢显式调用GC。嗯,对于ure它必须是一个内部UWP错误,因为页面应该自动卸载。可能它在1903年得到解决,因为我认为在1803年IsNavigationStackEnabled是一个新属性,但看起来没有任何效果。我通常做的是使用一种页面的一个实例,只更改viewmodel。这取决于应用程序的很多环境是的,IsNavigationStackEnabled是1809年添加的。共享页面实例和交换虚拟机似乎是一个很好的方法。