我目前在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中没有自动释放内存
基础教程推荐
- unity实现动态排行榜 2023-04-27
- C# List实现行转列的通用方案 2022-11-02
- linux – 如何在Debian Jessie中安装dotnet core sdk 2023-09-26
- C# windows语音识别与朗读实例 2023-04-27
- C#控制台实现飞行棋小游戏 2023-04-22
- winform把Office转成PDF文件 2023-06-14
- 一个读写csv文件的C#类 2022-11-06
- C# 调用WebService的方法 2023-03-09
- ZooKeeper的安装及部署教程 2023-01-22
- C#类和结构详解 2023-05-30