Сбой приложения Monotouch без StackTrace или журналов (Destructor никогда не вызывался) - PullRequest
3 голосов
/ 12 марта 2011

Мое приложение MonoTouch продолжает падать, и я не знаю, что делать. На данный момент, я чувствую, что я попробовал все. У меня есть RootViewController, который переходит на бесконечное количество vewcontroller. Каждый раз, когда происходит переход, я вручную вызываю dispose на предыдущем ViewController и отображаю новый.

Для меня это похоже на утечку памяти, так как приложение аварийно завершает работу около 20-40 контроллеров ViewController и определенно становится более вялым.

  1. Как посмотреть использование памяти моего приложения MonoTouch на устройстве? (Не вылетает в симуляторе)

  2. Есть еще какие-нибудь диагностические способы выяснить, почему происходит сбой?

Любая помощь будет благодарна.

ОБНОВЛЕНИЕ Я добавил следующее в свой ВК.

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

И его никогда не вызывают.

Ответы [ 2 ]

1 голос
/ 22 декабря 2011

Обязательно утилизируйте ненужные предметы. Несмотря на то, что Mono Touch делает это для вас, я считаю, что лучше сделать это в моем коде. Всегда заставляйте GC во время обширных процедур в циклах, где код генерирует много одноразовых объектов. Постскриптум Я бы не назвал Monotouch незрелым. Платформа качается!

0 голосов
/ 13 марта 2011

Класс C # GC может дать вам представление об общем объеме используемой памяти, но он очень неточный и в основном неверный.Тем не менее, он может сказать вам, увеличивается или уменьшается использование памяти.Вообще у меня было больше проблем с GC.Collect, чем когда-либо.Поэтому мое общее предложение - не использовать этот метод.

Вы можете выполнить отладку на устройстве, используя методы, описанные здесь .Однако у меня возникла проблема с этим, и я рекомендую связаться с Monotouch, если у вас возникнут проблемы с отладкой устройства.

Возможно, ваша проблема в том, что Monotouch хранит ViewController в памяти, несмотря на ваш вызов Dispose.Создайте свойство типа List и сохраняйте там свои VC.Это может упростить MonoTouch обнаружение и сбор неиспользуемых ВК.Кроме того, максимально удалите содержимое VC, прежде чем выпускать его из коллекции.Я видел, как Monotouch хранит ссылки на дочерние объекты, родительский объект которых я выбрасывал.

В общем, Monotouch не является зрелым продуктом, и вам придется привыкнуть обращаться к его группе поддержки.И пожалуйста , опубликуйте здесь ваше решение, чтобы мы все могли учиться!:)

...