使用Monotouch开发的应用程序崩溃,没有StackTrace或日志(析构函数从未被调用)

3
我的MonoTouch应用程序一直崩溃,我不知道该怎么办。目前为止,我感觉自己已经尝试了所有方法。我有一个RootViewController,它转换到无数个视图控制器。每次发生转换时,我都会手动在上一个ViewController上调用dispose,并显示新的ViewController。
对我来说,这感觉像是内存泄漏,因为应用程序在大约20-40个ViewControllers后崩溃,而且在此之前明显变得更加缓慢。
以下是需要翻译的内容:
  1. 如何在设备上查看我的MonoTouch应用程序的内存使用情况?(在模拟器中没有崩溃)

  2. 还有其他诊断方式可以找出崩溃原因吗?

任何帮助都将不胜感激。

更新 我已将以下内容添加到我的VC。

~TargetPromptController(){
    Console.WriteLine("TargetPromptController Released from memory!");
 }

而且它从未被调用。

2个回答

1

一定要处理不需要的对象。即使MonoTouch为您处理了其中的一些,我发现在我的代码中这样做更好。在循环中进行大量例程并生成许多可处理对象的代码时,始终强制进行GC。顺便说一句,我不会认为Monotouch是不成熟的。这个平台非常棒!


0

C#的GC类可以给你一个内存使用总量的指示,但是它非常不准确,大多数情况下都是错误的。然而,它可以告诉你内存使用是增加、减少还是稳定的。一般来说,我在使用GC.Collect时遇到的问题比不使用时更多。所以我的一般建议是不要使用那个方法。

您可以使用这里描述的技术在设备上进行调试。然而,我曾经遇到过这样的问题,并建议如果您在设备调试方面遇到问题,请联系Monotouch。

您的问题可能是Monotouch尽管您调用了Dispose,仍然将ViewController保留在内存中。创建一个类型为List的属性,并将您的VC放在那里,这可以使MonoTouch更容易地检测和收集未使用的VC。此外,在从集合中释放之前,请尽可能地从VC的内容中删除。我曾经看到Monotouch保留了我已经处理掉父对象的子对象的引用。

总的来说,Monotouch并不是一个成熟的产品,您将不得不习惯联系他们的支持团队。并且在这里发布您的解决方案,以便我们所有人都能学习! :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接