提问者:小点点

在Windows 10中处理通用Windows应用程序中的内存


我正在为Windows10开发一个UWP应用程序。我有一个问题的内存管理在我的应用程序。我有一个,它的内容中会有很多图像。当用户单击图像时,全尺寸图像将加载到窗格中。我在XAML中直接注册了很多点击和点击事件。当我检查内存使用时,它一直在增加,在一个点后,应用程序崩溃。我的问题是,是否需要注销所有在XAML中注册的事件,以便释放内存?我尝试调用,但这并不能解决问题。我想可能是内存泄漏了。应用程序中有多个页面,当用户选择之外的可用按钮时,内容会发生变化,以及在将SplitView内容设置为另一个页面之前,如何取消在该特定页面中注册的事件。

编辑:

整个页面的XAML超过300行,所以我不能将其粘贴在这里。但事件是这样登记的

<Button Name="Sample" Tapped="Sample_Tapped" Content="Sample Button" />

每次都会重新创建页面。它没有缓存。我在SplitView内容中有一个框架,每当用户希望更改显示的图像部分时,该框架就会更改。

MainFrame.Navigate(typeof(ImagePage),"SampleSection");

当用户更改节时,我将调用垃圾收集器

protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
    {
        GC.Collect();

    }

但没有释放内存。


共1个答案

匿名用户

我认为这一行造成了问题:

您将保持每次用户选择图像时创建新页面。它会超时消耗内存。

解决方案是使用新数据(new dataContext?)刷新页面,而不是创建新数据。另一种解决方案是,当您需要使用BackStack属性创建新页面时,清除大型机的导航堆栈。

将XAML中的设置为'required'也有帮助,但这不是问题的根源。