我们注意到,我们的UWP应用程序存在内存泄漏。我已经对其进行了调查,发现在导航到新页面时,即使运行GC,内存也会增加,并且似乎不会减少太多。
我整理了一个由两页组成的小型复制品:
<Page>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="70" />
<RowDefinition />
</Grid.RowDefinitions>
<Button x:Name="navigateButton" Content="Navigate" HorizontalAlignment="Center"
Click="NavigateButton_Click" />
<Frame x:Name="mainFrame" IsNavigationStackEnabled="False"
Padding="10" Grid.Row="1" />
</Grid>
</Page>
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}
private void NavigateButton_Click(object sender, RoutedEventArgs e)
{
mainFrame.Navigate(typeof(Page1), null, new Windows.UI.Xaml.Media.Animation.DrillInNavigationTransitionInfo());
}
}
<Page>
<VariableSizedWrapGrid ItemWidth="100" ItemHeight="60">
<Button Padding="20, 10" Content="Hello!"/>
<Button Padding="20, 10" Content="Hello!"/>
<Button Padding="20, 10" Content="Hello!"/>
<Button Padding="20, 10" Content="Hello!"/>
<Button Padding="20, 10" Content="Hello!"/>
<!-- And 25 more buttons here -->
</VariableSizedWrapGrid>
</Page>
public sealed partial class Page1 : Page
{
public Page1()
{
this.InitializeComponent();
}
~Page1()
{
Debug.WriteLine("Page dead :(");
}
}
完整的源代码可在GitHub上获得。
您会看到a video的副本。
我还尝试将Frame.IsNavigationStackEnabled设置为false,这无济于事。
我在这里做什么错了?
答案 0 :(得分:1)
我使用Windows 1803是因为我没有最新的1809,但我认为它的工作原理相同,
在第1页的代码中:
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
base.OnNavigatedFrom(e);
System.GC.Collect();
}
这是检查应用程序是否必须处理页面的另一种方法。而且有效。