Мое приложение MonoTouch продолжает падать, и я не знаю, что делать. На данный момент я чувствую, что перепробовал все. У меня есть RootViewController, который переходит на бесконечное количество vewcontrollers. Каждый раз, когда происходит переход, я вручную вызываю dispose на предыдущем ViewController и отображаю новый.
Для меня это похоже на утечку памяти, так как приложение вылетает примерно на 20-40 ViewController и определенно становится более вялым перед началом работы.
Как просмотреть использование памяти моим приложением MonoTouch на устройстве? (Не вылетает в симуляторе)
Есть ли еще диагностические способы выяснить, почему он падает?
Любая помощь будет признательна.
ОБНОВЛЕНИЕ Я добавил следующее в свой VC.
~TargetPromptController(){
Console.WriteLine("TargetPromptController Released from memory!");
}
И никогда не звонят.
Ответ 1 · Simeon
Класс C# GC может дать вам представление об общем объеме используемой памяти, но он очень неточен и в основном неверен. Однако он может сказать вам, увеличивается ли использование памяти, уменьшается или стабилизируется. Как правило, при использовании GC.Collect у меня было больше проблем, чем без него. Поэтому мое общее предложение - не использовать этот метод.
Вы можете выполнять отладку на устройстве с помощью методов, описанных здесь. Однако у меня были проблемы с этим, и я рекомендую связаться с Monotouch, если у вас возникнут проблемы с отладкой устройства.
Ваша проблема, вероятно, в том, что Monotouch сохраняет ViewController в памяти, несмотря на ваш вызов Dispose. Создайте свойство типа List и сохраните там свои VC. Это может упростить для MonoTouch обнаружение и сбор неиспользуемых VC. Кроме того, удалите как можно больше содержимого VC, прежде чем выпускать его из коллекции. Я видел, как Monotouch хранит ссылки на дочерние объекты, родительский объект которых я удалил.
В общем, Monotouch не является зрелым продуктом, и вам придется привыкнуть обращаться к их службе поддержки. И пожалуйста, опубликуйте свое решение здесь, чтобы мы все могли учиться! :)
Ответ 2 · рейтинг 1 · Keith Aymar
Обязательно избавляйтесь от ненужных объектов. Несмотря на то, что mono touch делает часть этого за вас, я считаю, что лучше сделать это в моем коде. Всегда принудительно выполняйте сборку мусора во время обширных подпрограмм в циклах, где код генерирует много одноразовых объектов. P.S. Я бы не назвал Monotouch незрелым. Платформа рулит!