c# – Windows Phone 8中没有自动释放内存

我目前在Windows Phone 8工作.我面临一些与内存有关的问题.我有两个PhoneApplicationPages.这两个页面都包含图像,文本块等.假设当我在第1页时我的应用程序使用30MB内存.如果我从第1页导航到第2页,则已用内存量增加到...

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

我有两个PhoneApplicationPages.这两个页面都包含图像,文本块等.假设当我在第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中没有自动释放内存

基础教程推荐