Windows Phone开发中的内存泄漏问题 - Silverlight框架

时间:2012-02-27 06:34:42

标签: windows-phone-7

我正在使用c#和银光平台在Windows手机中创建一款游戏。我是这项技术的新手,目前面临内存泄漏问题。

根据我所做的研究和研究,我尝试了所有的事情,包括事件,字符串和垃圾收集器的使用。

任何人都可以提供最佳利用垃圾收集器和内存管理的常见技巧,因为它现在似乎是问题。当我的垃圾收集器达到5个大小时,它就会停止收集新东西并且应用程序正在崩溃。

我也尝试清空gc collect中传递参数0的垃圾收集器,但它正在崩溃应用程序。

您能否指导并帮助我们注意基本事项,遵循过程以避免此类问题并最好地使用GC收集?

提前致谢, 雅各布

2 个答案:

答案 0 :(得分:3)

一般情况下,您永远不必须自己调用GC.Collect,因为每隔几秒就会自动收集一次未使用的对象。

至于什么阻止对象被收集,它归结为他们被" rooted"。根源包括:

  • 任何静态参考
  • 运行循环所持有的任何引用(您的Application是最接近的东西)
  • 当前页面或其背后的任何页面上显示的任何内容
  • 上述任何内容引用(包括UI事件),或由上述任何内容(等)引用的任何内容引用。

在上述场景中,那些对象和他们持有引用的任何对象都不能是GC' d。至于建议:

  • 避免将任何内容定义为static
  • 请注意Application
  • 保留多少个对象
  • 避免使用后备堆栈增长到极限级别的导航模型
  • 可能会在页面/ viewmodel的OnNavigatedFrom方法中将大型数据集的引用设置为null,并在OnNavigatedTo
  • 中重新初始化它们

我建议使用7.1 SDK附带的Windows Phone Profiler。它会告诉你内存中的对象和原因。

答案 1 :(得分:0)

如果没有看到任何代码,很难给出具体的建议。

但是,我强烈建议您运行内存分析工具,例如ANTS Memory Profiler.Net Memory Profiler。这些工具将向您显示代码的哪些部分从未发布,并且非常有助于您进行所需的调整。

相关问题