没有StackTrace或日志的Monotouch应用程序崩溃(从不调用析构函数)

时间:2011-03-12 18:14:15

标签: c# iphone ipad crash xamarin.ios

我的MonoTouch应用程序一直崩溃,我不知道该怎么做。在这一点上,我觉得我已经尝试了一切。我有一个RootViewController,它转换为无数的vewcontrollers。每次进行传输时,我都会在之前的ViewController上手动调用dispose并显示新的.Contrnition。

感觉就像一个内存泄漏给我,因为应用程序崩溃了大约20-40个ViewControllers并且肯定会在之前变得更加迟钝。

  1. 如何在设备上查看MonoTouch应用程序的内存使用情况? (不会在模拟器中崩溃)

  2. 了解崩溃原因的更多诊断方法?

  3. 任何帮助都会感激不尽。

      

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

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

    它永远不会被召唤。

2 个答案:

答案 0 :(得分:1)

务必处置不需要的对象。即使单声道触摸为你做了一些,我觉得在我的代码中做到这一点更好。在循环中的大量例程期间始终强制GC,其中代码生成大量一次性对象。附:我不会称Monotouch不成熟。平台摇滚!

答案 1 :(得分:0)

C#GC类可以显示正在使用的内存总量,但是非常不准确且大多数都是错误的。但是,它可以告诉您内存使用量是增加,减少还是稳定。一般来说,我在做GC.Collect时遇到的问题比我没有的要多。所以我的一般建议是不要使用那种方法。

您可以使用here所述的技术在设备上进行调试。但是,我遇到了问题,如果您遇到设备调试问题,建议您联系Monotouch。

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

总而言之,Monotouch不是一个成熟的产品,您将不得不习惯联系他们的支持团队。 ,在此发布您的解决方案,以便我们都可以学习! :)