gpt4 book ai didi

c# - UWP - 框架导航似乎会导致非托管内存泄漏

转载 作者:IT王子 更新时间:2023-10-28 23:38:20 28 4
gpt4 key购买 nike

似乎 Frame 导航(特别是 Frame.Navigate(Type) 方法)正在泄漏非托管内存。
每次导航后,当我查看 Visual Studio 诊断工具 时,Private Bytes 都会增加,但是当我拍摄内存快照时,堆大小 em> 没有增加。页面的组件越多,它就越糟糕。内存似乎永远不会被释放。应用程序是在 Debug 还是 Release 中构建(无论是否带有 .Net Native)都无关紧要。我正在使用 14393 SDK(周年更新)。

我创建了一个示例应用程序,它有一个母版页和 2 个(内容)页面,它在它们之间不断导航(在 PageLoaded 事件上)。我已将 CacheSize="0" 设置为 Frame 并且页面具有 NavigationCacheMode="Disabled" 因此它们不会被缓存。我还在每次导航之前清除后台堆栈并取消订阅 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;
}
}

以及对应的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>

这里的文本框是为了更好地显示问题。
可以看here当我开始导航时,Private Bytes 开始迅速增加,但 Heap Size 并没有增加。
启用缓存 (NavigationCacheMode="Required") 或手动调用 GC.Collect() 无济于事。
您可以查看完整的源代码here .

我有什么明显的遗漏吗?我没有正确清除所有内容吗?或者也许运行时最终会释放内存?

谢谢

更新:在评论中查看显示该行为的视频(我没有足够的声誉发布超过 2 个链接)

最佳答案

我无法重现您的问题,因为您的项目的监控结果在我这边如下。 enter image description here我没有在你的照片中看到 gabbge 集合。但在我这边,它有 GC 经常工作。注意 GC 不是实时的。您可以尝试使用GC.Collect Method () gabbge 自己收集,但不建议在产品中使用。详情可引用this thread .

关于c# - UWP - 框架导航似乎会导致非托管内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40677798/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com