我目前在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中没有自动释放内存


基础教程推荐
- 实例详解C#实现http不同方法的请求 2022-12-26
- c# – USING块在网站与Windows窗体中的行为不同 2023-09-20
- Unity 如何获取鼠标停留位置下的物体 2023-04-10
- C#调用摄像头实现拍照功能的示例代码 2023-03-09
- C#中 Json 序列化去掉null值的方法 2022-11-18
- C#通过标签软件Bartender的ZPL命令打印条码 2023-05-16
- C# 解析XML和反序列化的示例 2023-04-14
- C#中的Linq to JSON操作详解 2023-06-08
- Unity shader实现高斯模糊效果 2023-01-16
- C#获取指定目录下某种格式文件集并备份到指定文件夹 2023-05-30