gpt4 book ai didi

c# - Windows Phone 8 中不会自动释放内存

转载 作者:太空狗 更新时间:2023-10-30 00:40:33 24 4
gpt4 key购买 nike

我目前在 Windows Phone 8 中工作。我面临一些与内存相关的问题。

让我有两个 PhoneApplicationPages。两个页面都包含图像、文本 block 等。假设当我在第 1 页时,我的应用程序正在使用 30MB 内存。如果我从第 1 页导航到第 2 页,则使用的内存量增加到 35MB。然后当我回到第1页时,使用的内存仍然是35MB。

为什么内存或缓存没有被自动释放?有没有办法手动清除内存或缓存?

(p.s:代表页面的两个类都是静态的,我在 OnNavigatedFrom 方法中将它们设置为 null。)

最佳答案

由于某些我不知道的原因,运行时会保留对您页面的引用一段时间,即使页面已从返回堆栈中删除之后也是如此。我在这里记录了我对这种行为的发现:http://blogs.codes-sources.com/kookiz/archive/2013/11/11/wpdev-give-that-memory-back.aspx

长话短说,如果您想立即回收内存,请将此代码添加到您的页面:

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedTo(e);

this.Dispatcher.BeginInvoke(() =>
{
GC.Collect();
GC.WaitForPendingFinalizers();

this.Dispatcher.BeginInvoke(() =>
{
GC.Collect();
GC.WaitForPendingFinalizers();

this.Dispatcher.BeginInvoke(() =>
{
GC.Collect();
GC.WaitForPendingFinalizers();
});
});
});
}

请注意,这并不是真正的泄漏,即使您不使用此代码,您的内存最终也会被释放(通常在大约三页导航之后)。但更早释放内存确实有助于内存密集型应用程序。

关于c# - Windows Phone 8 中不会自动释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26755698/

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