утечка объекта в инструментах, даже когда запущен HelloWorld_IPhone monotouch - PullRequest
2 голосов
/ 08 февраля 2012

Мое приложение постоянно получает предупреждения о памяти, и я действительно не могу найти причину.У меня была большая утечка, даже если я сводил приложение к минимуму.Так что я подумал о том, чтобы скомпилировать стандартное приложение HelloWorld_IPhone из примеров monotouch и посмотреть, получу ли я такую ​​же утечку.Оказывается, я делаю.Действительно смущает меня.

enter image description here

Утечка возникает сразу после запуска приложения (красная полоса заполняет весь столбец).

утечка объекта: Malloc 16 байт, ответственныйБиблиотека: HelloWorld_IPhone, ответственный кадр: mono_dl_open

У меня вопрос: нормально ли это или я что-то упустил?

EDIT : снимок экрана с выходом инструментов, когдазапуск приложения TweetStation на моем устройстве в режиме отладки!Те же результаты, что и у моего приложения.Конечно, что-то здесь не так? Снимок экрана вывода инструментов при запуске приложения TweetStation на моем устройстве

Ответы [ 2 ]

5 голосов
/ 09 февраля 2012

При попытке отладки утечек в неуправляемом коде с помощью Инструментов вы можете создать инструмент «Распределение» и затем убедиться, что вы выбрали опцию «Только отслеживать активные распределения», например:

Скриншот инструментов http://tirania.org/s/991d39b7.png

Показывает только те объекты, которые в данный момент являются "живыми" и не были освобождены.С Mono вы заметите, что некоторые объекты хранятся до тех пор, пока не будет запущен сборщик мусора.Так что со временем шипы выделенных объектов исчезают.

0 голосов
/ 08 февраля 2012

Я думаю, вы путаете несколько разных вещей.Инструменты профилирования, как правило, показывают большое количество данных, и во всех них легко потеряться.

Сначала изображение, на которое вы ссылались (я добавил его в исходный вопрос), показывает две вещи:

  1. Распределение .Это строка инструмента, которую вы выбрали.То, что он показывает, это то, что выделено вашим приложением.Вы можете видеть лот из 16 байтов выделения , но они не утечки только потому, что они там показаны.

  2. Предупреждение о том, что ваше приложение получило Предупреждение о нехватке памяти .IOW вы исчерпали память (устройства / симулятора) и получаете уведомление об освобождении памяти (или iOS убьет ваше приложение).Опять же, это не означает, что есть какие-либо (или крупные) утечки.

На вашей картинке не показано, что находится во втором ряду прибора ( Утечки )). может быть много утечек (но я сомневаюсь, что для образца hello world) или только несколько.

Есть некоторые случаи внутри Mono (например, mono_dl_open), гдепамять выделяется и никогда не освобождается (потому что этого не может быть, например, она закрывает требуемую библиотеку).Это не , как правило, проблема, так как моно среда выполнения не может быть выгружена без выгрузки (т.е. закрытия) вашего приложения (где память будет возвращена операционной системой).

В любом случаенам нужно больше подробностей, чтобы узнать, связана ли эта утечка (или другие) с распределением памяти вашего приложения (или нет).Если вы можете предоставить их (отредактируйте свой вопрос здесь) или приложите образец к сообщению об ошибке на http://bugzilla.xamarin.com/

...