![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Oct 2011
Сообщений: 18
|
Здравствуйте,
в следующем коде наблюдается утечка памяти: a = dot[0].x; a = dot[0].y; a = dot[1].x; a = dot[1].y; a = dot[2].x; a = dot[2].y; a = dot[3].x; a = dot[3].y; a = dot[4].x; a = dot[4].y; этот код выполняется при срабатывании таймера, a: Number; dot: Vector.<RDot> = new Vector.<RDot>(); RDot - пользовательский класс без Set и Get методов, Если для dot поставить тип Array, то утечка такая же. Как победить? Добавлено через 38 минут Ситуация разрешилась следующим изменением кода для каждого индекса: Вопрос остается открытым: почему при чтении свойства dot[4].x из массива происходит утечка памяти? Это такая фишка AS3? |
|
|||||
|
Modus ponens
|
Как вы определили утечку? В вашем коде вообще не понятно, являются ли a и dot локальными переменными функции, или полями класса. Существуют ли ссылки на dot помимо этого фрагмента и т.д. Судя по тому, что прозвучало слово "таймер" - таймеры более частая причина проблем связанных с памятью. Их нужно останавливать и отписываться от событий если вы их планируете больше не использовать.
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: Oct 2011
Сообщений: 18
|
Это точно не связано с событиями, если проблемный код закомментировать, то утечка пропадает.
dot - поле класса, a-пробовал и в поле класса размещать и в функции, утечка от этого не зависит. утечку определил с помощью System.totalMemery. На элементы массива dot существуют ссылки в других подобных массивах, утечка может быть с этим связана? (хотя механизм утечки мне не понятен) |
|
|||||
|
Banned
Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Цитата:
Для флеш плеера абсолютно нормально потребление нескольких лишних мегабайт в течении определенного времени. После срабатывания сборщика мусора память освобождается |
|
|||||
|
Регистрация: Oct 2011
Сообщений: 18
|
Я не считаю это нормальным, и в официальном руководстве от Adobe рекомендуется избегать утечек. Пока ситуация разрешилась. Но хотелось бы понять природу этой утечки.
|
|
|||||
|
Вот именно утечек, а не того, что Вы называете этим словом. Сборщик мусора запускается когда ему заблагорассудится, а не после каждой строчки в Вашем коде.
Добавлено через 2 минуты И почитайте про профайлер и разберитесь, что такое утечка (на википедии есть статья).
__________________
http://www.chessmax.ru |
|
|||||
|
Регистрация: Oct 2011
Сообщений: 18
|
Оказалось, что при периодическом обращении к массиву public var zemy:Vector.<Number> , элементы которого имеют тип Number, происходит постоянное увеличение System.totalMemery.
Разве постоянное увеличение памяти при каждом обращении к элементу массива не является утечкой? Я так и не понял: возрастание System.totalMemery при каждом чтении элемента любого массива - это нормально? |
|
|||||
|
Регистрация: Feb 2011
Сообщений: 100
|
Полный код лучше увидеть, а так сложно сказать. Тем боле это могут быть просто внутренние механизмы флеша при доступе к вот такому индексу. Например, флеш сначала делает dot[0], получает ссылку на объект и запоминает её для оптимизации - отсюда утечка. Вернее это даже не утечка, а временый перерасход памяти, который потом исчезает или используется повторно. Пытаться оптимизировать скриптовый язык и предсказать его поведение на таком низком уровне задача неблагодарная и малополезная.
Так попробуйте ещё: Или: |
|
|||||
|
Встроенные типы, такие как Number, не передаются по ссылке, по этому флешплеер при обращении создает новую копию каждый раз, вот отсюда (возможно) и увеличение totalMemory.
__________________
http://www.chessmax.ru |
|
|||||
|
Modus ponens
|
Чтобы доказать, что существует утечка вам нужно получить ошибку #1000 - out of memory. Иначе это все досужие домыслы. В вашем коде нет никаких очевидных признаков, более того, никаких даже более менее понятных признаков того, что именно происходит (вам бы нужно было продемонстривоать как массив / вектор создается, как заполняется, кто к нему осуществляет доступ, и когда объекты из вектора / массива больше не имеют внешних ссылок.
__________________
Hell is the possibility of sanity |
![]() |
![]() |
Часовой пояс GMT +4, время: 17:45. |
|
|
« Предыдущая тема | Следующая тема » |
|
|