Я пытался профилировать мобильное приложение 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>
Вот так. Это не может быть проще.
Так что, если вы пытаетесь профиль этого с профилировщиком памяти это сделать:
- запустить приложение, сделать снимок
- перейти по мнению ребенка и вернуться, а затем запустить сбор мусора, и взять снимок.
- повторите шаг 2 несколько раз
Теперь иди и попробовать «найти объекты Бесполезные» на любых двух снимков, и вы найдете более 100 объектов «Бесполезные» после возвращения на первый взгляд, и все в childview должны были быть уничтожены. Это действительно обескураживает, потому что нет мыслимого способа сделать это более простым или «чистым» с точки зрения управления памятью.
Может ли кто-нибудь пролить свет на то, почему эти объекты создаются и никогда не выбрасываются? Кроме того, любые советы по получению действительно чистого мобильного приложения на основе обзора, которое действительно удаляет всю память, связанную с разрушенным представлением, будут отличными.
До сих пор у меня есть:
- всегда добавляет слабые обработчик событий
- набор переменного нуль при закрытии вида (и удалять обработчик событий)
Благодаря Энди
Что такое 100 объектов, которые мешают? Являются ли они явными объектами для использования в дочернем представлении? Или просто части Flex Framework? – JeffryHouser