быстрый вопрос об управлении памятью в AS3 - PullRequest
1 голос
/ 09 апреля 2010

следующий метод будет вызываться много раз.я обеспокоен тем, что непрерывный вызов новых прямоугольников добавит потенциально ненужное потребление памяти, или память используется для создания предыдущего прямоугольника, освобожденного / перезаписанного для размещения другого прямоугольника, поскольку он назначен той же переменной экземпляра?

private function onDrag(evt:MouseEvent):void
        {
        this.startDrag(false, dragBounds());
        }

private function dragBounds():Rectangle
    {
    var stagebounds = new Rectangle(0 - swatchRect.x, 0 - swatchRect.y, stage.stageWidth - swatchRect.width, stage.stageHeight - swatchRect.height);
    return stagebounds;
    }

1 Ответ

4 голосов
/ 09 апреля 2010

Это быстрый вопрос, но очень важный!Слишком немногие разработчики ActionScript заботятся об этом.Так что слава вам!

Каждый раз, когда вы создаете новый прямоугольник, для него выделяется новая память.Как только все ссылки на этот прямоугольник удалены, он становится приемлемым для сборки мусора (GC), что означает, что при следующем запуске GC он будет освобожден из памяти.(В этом случае все ссылки удаляются при вызове stopDrag())

Экземпляр Rectangle занимает очень мало памяти, а при регулярном запуске сборщика мусора экземпляры будут постоянно очищаться.Кроме того, мы можем быть уверены, что в любой момент времени будет создано не более одного, а предыдущий экземпляр не будет доступен для GC.(Предполагая, что вы будете звонить stopDrag, прежде чем снова позвонить dragBounds.)

Действительно, это тот случай, когда вам не нужно беспокоиться об этом.Ваш код в порядке, как есть.Вам понадобятся тысячи прямоугольников (например, миллионы за один раз), прежде чем вы столкнетесь с какими-либо потенциальными проблемами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...