gpt4 book ai didi

c# - 如何强制通用应用程序释放内存?

转载 作者:太空狗 更新时间:2023-10-29 20:41:31 27 4
gpt4 key购买 nike

创建了一个会泄漏内存的简单应用:

查看

<Page
...
x:Class="App3.MainPage"
mc:Ignorable="d">
<StackPanel>
<Image Width="300" Height="200"
Source="/Assets/BBlHOiv.jpg"></Image>
<Button Click="Button_Click">Navigate</Button>
</StackPanel>
</Page>

代码隐藏

public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}

private void Button_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e)
{
this.Frame.Navigate(typeof(MainPage));
}

每次单击该按钮时,代码都会导航到包含图像的同一页面 ~400KB。如果我继续快速单击按钮,每次单击或几次单击都会增加内存。内存没有回收,或者至少没有及时回收。在真实的应用程序中,具有更复杂的页面和更复杂的导航(包括圆形导航)这可能成为一个大问题。问题是,如何强制应用程序释放内存?理想情况下,一旦不再需要/显示某个页面。

我已经尝试过以下方法,但没有成功。

#1 清除框架的导航堆栈

    protected override void OnNavigatedFrom(NavigationEventArgs e)
{
base.OnNavigatedFrom(e);
this.Frame.BackStack.Clear();
}

#2 使用 MVVM 时,将 DataContext 设置为 null(当在 XAML 标记中设置 datacontext 时)

    protected override void OnNavigatedFrom(NavigationEventArgs e)
{
base.OnNavigatedFrom(e);
this.DataContext = null;
this.Frame.BackStack.Clear();
}

最佳答案

.Net 中的垃圾收集器按照自己的节奏执行,不一定在事情关闭时执行。我不建议这样做,但您可以手动调用 GC.Collect();。我会追查“泄漏”的来源。

有关垃圾收集过程的更多信息: https://msdn.microsoft.com/en-us/library/xe0c2357%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

关于c# - 如何强制通用应用程序释放内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31992554/

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