分析后台任务的内存使用情况

Posted

技术标签:

【中文标题】分析后台任务的内存使用情况【英文标题】:Profiling memory usage of background task 【发布时间】:2015-04-16 15:44:39 【问题描述】:

我正在编写一个使用 BackgroundMediaPlayer 的多媒体应用程序 (WP 8.1)。问题在于内存 - 后台任务经常因 OutOfMemoryException 而崩溃。我尝试通过代码查看是否有任何内存泄漏,但找不到任何内存泄漏。

我看到这篇文章描述了正在运行的应用程序的内存分析 - http://blogs.msdn.com/b/visualstudioalm/archive/2014/04/03/performance-profiling-on-windows-phone-8-1-with-visual-studio.aspx 后台任务如何实现相同的目标?或者还有其他方法可以查看如何优化后台任务的内存使用?

我已经尝试 GC.Collect 作为最后的手段,但没有帮助..

【问题讨论】:

问题不是泄漏,而是没有发布的硬引用。我通常发现这些隐藏的地方是不明显的,它们是附加到您认为已释放的内存的事件处理程序。 【参考方案1】:

安装应用程序Field Medic,通过USB连接手机并在资源管理器中打开文件夹This PC\Windows Phone\Phone\Documents\FieldMedic\CustomProfiles,根据需要在该路径中创建缺少的文件夹。

下载此profile file,将其复制到手机上的CustomProfiles文件夹中。

启动 Field Medic 应用程序,转到 advanced,选择 custom 下的 Multimedia Memory Profile。

现在运行您的应用程序,当您捕获了几分钟的内存增长时,返回 Field Medic,停止跟踪。将 ETL 文件从 This PC\Windows Phone\Phone\Documents\FieldMedic\reports 复制到您的 PC 和 analyze it with Windows Performance Analyzer (WPA)。

【讨论】:

以上是关于分析后台任务的内存使用情况的主要内容,如果未能解决你的问题,请参考以下文章

应用内存测试分析

如何查看 进程内存使用情况 linux

mysql内存使用情况

记一次线上内存溢出问题排查过程

从JVM堆内存分析验证深浅拷贝#yyds干货盘点#

查看LINUX进程内存占用情况