看来Frame导航(特别是Frame.Navigate(Type)方法)正在泄漏非托管内存.
在我查看Visual Studio诊断工具的每次导航之后,Private Bytes正在上升,但是当我拍摄内存的快照时,堆大小没有增加.页面越多,组件越糟糕.内存似乎永远不会被释放.无论应用程序是构建在Debug还是Release(无论是.Net Native还是没有),都无关紧要.我正在使用14393 SDK(周年纪念更新).
我创建了一个示例应用程序,它具有一个主页面和两个(内容)页面,它们之间保持导航(在PageLoaded事件上).我已将CacheSize ="0"设置为Frame,并且Pages具有NavigationCacheMode ="Disabled",因此它们不会被缓存.我也在每次导航之前清除了backstack并取消订阅PageUnloaded上的每个事件.
以下是其中一个页面的.cs文件:
public sealed partial class FirstPage : Page
{
public FirstPage()
{
this.InitializeComponent();
}
private void NavigateToSecondPage()
{
MainPage.ContentFrame.BackStack.Clear();
MainPage.ContentFrame.Navigate(typeof(SecondPage));
}
private void NavigateButton_Click(object sender, RoutedEventArgs e)
{
NavigateToSecondPage();
}
private void Page_Loaded(object sender, RoutedEventArgs e)
{
if (!MainPage.StopNavigating)
{
NavigateToSecondPage();
}
}
private void Page_Unloaded(object sender, RoutedEventArgs e)
{
this.NavigateButton.Click -= NavigateButton_Click;
this.Loaded -= Page_Loaded;
this.Unloaded -= Page_Unloaded; …Run Code Online (Sandbox Code Playgroud)