2012-06-25 4 views
1

Я пытался профилировать мобильное приложение flex для утечки памяти, и я получаю очень необъяснимые результаты, поэтому я решил сделать самый простой тест, который можно было бы увидеть, чтобы убедиться, что управление гибкой памятью является надежным.Flex утечки памяти и профилирование памяти

FirstView.mxml

<?xml version="1.0" encoding="utf-8"?> 
    <s:View 
     xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:s="library://ns.adobe.com/flex/spark" 
     title="FirstView" 
     > 

     <s:Button 
      label="Go to child" 
      click="navigator.pushView(ChildView)" 
      /> 

</s:View> 

ChildView.mxml

<?xml version="1.0" encoding="utf-8"?> 
    <s:View 
     xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:s="library://ns.adobe.com/flex/spark" 
     title="ChildView" 
     > 

     <s:Button 
      label="Back to home" 
      click="navigator.popView()" 
      /> 

</s:View> 

Вот так. Это не может быть проще.

Так что, если вы пытаетесь профиль этого с профилировщиком памяти это сделать:

  1. запустить приложение, сделать снимок
  2. перейти по мнению ребенка и вернуться, а затем запустить сбор мусора, и взять снимок.
  3. повторите шаг 2 несколько раз

Теперь иди и попробовать «найти объекты Бесполезные» на любых двух снимков, и вы найдете более 100 объектов «Бесполезные» после возвращения на первый взгляд, и все в childview должны были быть уничтожены. Это действительно обескураживает, потому что нет мыслимого способа сделать это более простым или «чистым» с точки зрения управления памятью.

Может ли кто-нибудь пролить свет на то, почему эти объекты создаются и никогда не выбрасываются? Кроме того, любые советы по получению действительно чистого мобильного приложения на основе обзора, которое действительно удаляет всю память, связанную с разрушенным представлением, будут отличными.

До сих пор у меня есть:

  • всегда добавляет слабые обработчик событий
  • набор переменного нуль при закрытии вида (и удалять обработчик событий)

Благодаря Энди

+0

Что такое 100 объектов, которые мешают? Являются ли они явными объектами для использования в дочернем представлении? Или просто части Flex Framework? – JeffryHouser

ответ

1

Первых , вы не уничтожаете какие-либо объекты в вашем примере - поэтому ссылки на указатели не удалены, чтобы сбор мусора захватил их.

Во-вторых, это не технически утечка памяти, если ваше приложение по-прежнему не требует больше памяти. Насколько я могу судить, он не создает кучу новых объектов каждый раз, когда взгляды толкаются, а он достигает предела, и это все.

Я не вижу, как память постоянно растет, я не думаю, потому что у вас есть 100 объектов, висящих вокруг, у вас есть утечка памяти. Теперь, если вы получили 100 объектов каждый раз, когда вы подтолкнули представление, THAT определенно будет утечкой памяти.

Дайте мне знать, если вы видите что-то другое на вашем конце. :)

+0

Привет Нейт, я думаю, что мое понимание функции «Найти Loitering Objects» является ошибочным. То, как я думал, что это сработало, заключается в том, что он найдет различия в экземпляре count между двумя моментальными снимками.Это заставило меня поверить, что эти 100+ объектов создавались каждый раз, когда я повторял последовательность. Однако, открывая каждый снимок памяти и сравнивая количество экземпляров, я вижу, что на самом деле они стабильны и не лазают. Поэтому я предполагаю, что теперь у меня есть возможность найти утечки памяти в моем реальном приложении. Остается только вопрос, что действительно делает функция «Loitering Objects» :-) – Andy

Смежные вопросы