Dường như Điều hướng khung (cụ thể là Khung.Phương pháp (Loại)) đang bị rò rỉ bộ nhớ không được quản lý.
Sau mỗi chuyển hướng khi tôi nhìn vào Visual Studio Tools, Private Bytes đang đi lên nhưng khi tôi có một bản chụp của bộ nhớ, các Heap Kích không tăng. Càng nhiều thành phần trang càng tệ hơn. Bộ nhớ dường như không bao giờ được phát hành. Nó không quan trọng cho dù các ứng dụng được xây dựng trong Debug hoặc Release (cả với. Net Native và không có). Tôi đang sử dụng SDK 14393 (Bản cập nhật kỷ niệm).UWP - Điều hướng khung dường như gây rò rỉ bộ nhớ không được quản lý
Tôi đã tạo một ứng dụng mẫu có trang chính và 2 trang (nội dung) mà nó tiếp tục điều hướng ở giữa (trên sự kiện PageLoaded). Tôi đã đặt CacheSize = "0" vào Khung và Trang có NavigationCacheMode = "Đã tắt" để chúng không được lưu trong bộ nhớ cache. Tôi cũng đang xóa hậu trường trước mỗi lần điều hướng và hủy đăng ký mọi sự kiện trên PageUnloaded.
Dưới đây là file .cs cho một trong những Trang:
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;
}
}
Và tương ứng XAML file:
<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>
Các textbox đây đang có để hiển thị tốt hơn vấn đề.
Bạn có thể xem here rằng ngay sau khi tôi bắt đầu điều hướng Byte riêng bắt đầu tăng nhanh nhưng kích thước Heap Heap không tăng.
Bật bộ nhớ cache (NavigationCacheMode = "Bắt buộc") hoặc gọi thủ công GC.Collect() không hữu ích.
Bạn có thể xem mã nguồn đầy đủ here.
Có điều gì hiển nhiên tôi bị thiếu không? Tôi không xóa tất cả mọi thứ đúng cách? Hoặc có lẽ thời gian chạy sẽ giải phóng bộ nhớ cuối cùng?
Cảm ơn bạn
Cập nhật: Nhìn trong các ý kiến cho một video cho thấy hành vi (Tôi không có đủ uy tín để gửi hơn 2 liên kết)
[Ở đây] (http://i.imgur.com/QuQIaFN.png) (Tôi không thể đăng nhiều hơn 2 liên kết trong bài đăng) là so sánh hai ảnh chụp nhanh _Native Heap_. Từ vấn đề này, có vẻ như vấn đề liên quan đến các mẫu và bố cục XAML thay vì Frame.Navigate – Roozi
Tôi đã ghi lại [video ngắn] (http://www.screencast.com/t/MrBT1ozgwu) mà bạn có thể hành vi trên thiết bị của tôi. Bạn cũng có thể thấy rằng việc bật bộ nhớ cache không giúp ích gì. – Roozi