繁体   English   中英

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

[英]Handling memory in Universal Windows Apps in Windows 10

我正在为Windows 10开发一个UWP应用程序。我的应用程序中存在内存管理问题。 我有一个SplitView其内容中将包含大量图像。 当用户单击图像时,将在窗格中加载完整大小的图像。 我正在XAML中直接注册很多Click and Tapped事件。 当我检查内存使用情况时,它会不断增加,在一点之后,应用程序崩溃了。 我的问题是,我是否需要取消注册我在XAML中注册的所有事件才能释放内存? 我尝试调用GC.Collect()但这并没有解决问题。 我认为可能存在内存泄漏。 应用程序中有多个页面,当用户选择SplitView外部可用的按钮时,内容会发生变化,如何在使SplitView内容具有其他页面之前取消注册该特定页面中注册的事件。

编辑:

整个页面的XAML超过300行,所以我不能在这里粘贴它。 但事件是这样注册的

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

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

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

当用户更改部分时,我正在调用垃圾收集器

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

    }

但是没有释放内存。

我认为这一行会导致问题:

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

每当用户选择图像时,您将继续创建新页面。 它会耗费记忆加班。

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

将XAML中的NavigationCacheMode设置为“Required”也可以提供帮助,但它不是问题的根源。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM