我目前在Windows Phone 8工作.我面临一些与内存有关的问题.我有两个PhoneApplicationPages.这两个页面都包含图像,文本块等.假设当我在第1页时我的应用程序使用30MB内存.如果我从第1页导航到第2页,则已用内存量增加到...
![](https://oss.womengda.net/imgfile/2309/1E39A446004Z-562T.jpg)
我目前在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中没有自动释放内存
![](/xwassets/images/pre.png)
![](/xwassets/images/next.png)
- c# 模拟线性回归的示例 2023-03-14
- user32.dll 函数说明小结 2022-12-26
- 在C# 8中如何使用默认接口方法详解 2023-03-29
- WPF使用DrawingContext实现绘制刻度条 2023-07-04
- Unity Shader实现模糊效果 2023-04-27
- 如何使用C# 捕获进程输出 2023-03-10
- .NET CORE DI 依赖注入 2023-09-27
- Unity3D实现渐变颜色效果 2023-01-16
- Oracle中for循环的使用方法 2023-07-04
- C# 使用Aspose.Cells 导出Excel的步骤及问题记录 2023-05-16