Memory leaks 在Windows phone运行时页面之间导航

Memory leaks 在Windows phone运行时页面之间导航,memory-leaks,windows-runtime,windows-phone-8.1,Memory Leaks,Windows Runtime,Windows Phone 8.1,假设我有两页,第一页和第二页。 当我启动应用程序时,第1页正在加载,然后我可以选择转到第2页。然后我可以回到第一页。 问题是,如果我多次执行Page1->Page2->Page1,则每次导航时都会调用Page2的构造函数(我想对于Page1也是如此),并且会使用越来越多的内存。 此外,如果应用程序被挂起并恢复,则会调用resuming方法n次Page2被实例化 请问有没有办法避免这种情况 使用 默认情况下,每个导航都会创建特定对象的新实例 请求Page子类,并处理上一个Page实例。这 即使在导

假设我有两页,第一页和第二页。 当我启动应用程序时,第1页正在加载,然后我可以选择转到第2页。然后我可以回到第一页。 问题是,如果我多次执行Page1->Page2->Page1,则每次导航时都会调用Page2的构造函数(我想对于Page1也是如此),并且会使用越来越多的内存。 此外,如果应用程序被挂起并恢复,则会调用resuming方法n次Page2被实例化

请问有没有办法避免这种情况

使用

默认情况下,每个导航都会创建特定对象的新实例 请求Page子类,并处理上一个Page实例。这 即使在导航回以前访问过的页面或 新的页面类型与以前的页面类型相同。应用程序 频繁导航到相同页面可以缓存和重用 页面实例,以提高导航效率。为此,请设置 CacheSize属性指定要缓存的页数。每页 要缓存的类型,还必须设置 Page.NavigationCacheMode属性设置为Enabled或Required。页 使用所需的缓存模式时,无论缓存大小如何,都会缓存 值,并且不计入CacheSize总计


参考

您当前使用的导航代码是什么?当您“返回”时,可以使用
GoBack
而不是
导航
。有一个
backbackback
,其中
Navigate
将新页面推送到它,然后
GoBack
弹出最后一个页面,这是您想要的。我使用GoBack从Page2到Page1,因此Page1的构造函数只调用一次,但要从Page1加载Page2,我使用:Frame.Navigate(typeof(Page2));每次调用Page2的构造函数=>每次都实例化一个新页面。有没有办法检查Page2是否已经实例化,并加载它而不是创建一个新的页面?您确定上一个页面实例已经处理了吗?因为当我监视内存时,当我循环Page1->Page2->Page1->Page2->。。。内存正在增长。是否已在第2页将NavigationCacheMode设置为Required?