2012-02-27 76 views
1

我在使用c#和silver light平台的Windows手机中创建了一个游戏。我是这种技术的新人,目前面临内存泄漏问题。根据我所做的研究和研究,我试图做所有的事情,包括事件,字符串和垃圾回收器的使用。Windows Phone开发中的内存泄漏问题 - Silver Light Framework

任何人都可以给出共同的提示,以最好地利用垃圾收集器和内存管理,因为它现在似乎问题。当我的垃圾收集器达到5 lac大小,它停止收集新的东西和应用程序正在崩溃。

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

您可以请指导和帮助基本的事情要照顾,遵循的过程,以避免这样的问题和最佳使用GC收集?

由于提前, 雅各

回答

0

没有看到任何你的代码,它是很难给出具体建议。

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

+0

Windows Phone实际上附带了它自己的内存分析器(并且正常的.NET不能使用它)。 – 2012-02-28 07:26:19

3

一般来说,你应该从来没有必须自己调用GC.Collect作为未使用的对象将自动收集每隔几秒钟。

至于什么可以阻止对象被收集,它归结为他们“根植”。罗茨包括:

  • 任何静态引用
  • 由运行环举行的任何引用(你Application是这里最接近)当前页面或背后
  • 任何事,页面上显示
  • 什么参考由任何上述(包括UI事件),或任何引用的任何上述(等)任何引用。

在上述情况下,这些对象和任何对象他们坚持基准不能被GC'd。因此,作为建议:

  • 避免定义什么是static
  • 小心多少对象被Application
  • 召开避免导航模式,让你的背部栈增长到ulimited水平
  • 潜在看看在设置引用大型数据集在你的页面/视图模型的OnNavigatedFrom方法为null,重新初始化它们OnNavigatedTo

我建议使用7.1 SDK附带的Windows Phone Profiler。它会告诉你什么是记忆中的对象和原因。