フレームナビゲーション(特にFrame.Navigate(タイプ)メソッド)がアンマネージメモリをリークしているようです。すべてのナビゲーション後
は私がVisual Studioの診断ツールを見たとき、プライベートバイトが上がっているが、私は、メモリのスナップショットを撮るとき、ヒープサイズが増加していません。より多くのコンポーネントがページを悪化させるほどです。メモリは解放されていないようです。アプリがDebugかRelease(どちらも.Net NativeとNon)でビルドされているかどうかは関係ありません。私は14393 SDK(Anniversaryアップデート)を使用しています。UWP - フレームナビゲーションで管理されないメモリリークが発生するようです。
私はマスターページとその間をナビゲートする2つの(コンテンツ)ページを持つサンプルアプリケーションを作成しました(PageLoadedイベント)。私はに設定しました。フレームにはCacheSize = "0"、ページにはNavigationCacheMode = "無効"がキャッシュされません。また、すべてのナビゲーションの前にバックスタックをクリアし、PageUnloadedのすべてのイベントを登録解除します。
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;
}
}
と、対応するXAMLファイル:より良い問題を示すために、ここに
<Page
x:Class="LeakTestApp.FirstPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:LeakTestApp"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Loaded="Page_Loaded"
Unloaded="Page_Unloaded">
<StackPanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<TextBlock Text="First Page" FontSize="32" />
<Button x:Name="NavigateButton" Content="Navigate to Second Page" Click="NavigateButton_Click" />
<StackPanel Width="350">
<TextBox />
<TextBox />
<TextBox />
<TextBox />
<TextBox />
<TextBox />
<TextBox />
<TextBox />
<TextBox />
<TextBox />
<TextBox />
<TextBox />
<TextBox />
<TextBox />
<TextBox />
<TextBox />
<TextBox />
<TextBox />
<TextBox />
</StackPanel>
</StackPanel>
</Page>
テキストボックスがあります。ここ
は、ページの1のためには.csファイルです。
は、ナビゲーションを開始するとすぐに表示されます。プライベートバイトは急速に増加し始めますが、ヒープサイズは増加しません。
キャッシュを有効にする(NavigationCacheMode = "Required")、またはGC.Collect()を手動で呼び出すことは役に立ちません。
完全なソースコードhereを見ることができます。
紛失しているものがありますか?私はすべてを適切にクリアしていないのですか?あるいは、ランタイムは最終的にメモリを解放するでしょうか?
はあなたに更新をありがとう:挙動を示す動画のコメントに見て
[ここ](http://i.imgur.com/QuQIaFN.png)(2つ以上のリンクを投稿できません)は、2つの_Native Heap_スナップショットの比較です。これは、問題がFrameではなくXAMLのテンプレートやレイアウトと関係しているように見えます.Navigate – Roozi
[ショートビデオ](http://www.screencast.com/t/MrBT1ozgwu)を録音しました。私のデバイス上の動作。また、キャッシュを有効にしても役立たないことがわかります。 – Roozi