Искры утечки памяти - PullRequest
       3

Искры утечки памяти

1 голос
/ 14 февраля 2011

Я пытался отследить утечки памяти в нашем приложении и постоянно возвращаюсь к тому, чтобы рассматривать компоненты Spark как виновника.

Я думаю, что нашел причину, но мое понимание «Сборка / маркировка мусора» не слишком горячо, поэтому я хотел бы проверить свои выводы.

Многие классы в Spark используют RichEditableText для отображения своих текстовых свойств (ComboBox, TextInput).

RichEditableText имеет локальное свойство textContainerManager и часто вызывает compose() для этого.

Вот соответствующий сокращенный отрывок из TextContainerManager

// Line 282 - 292:
    static private var stringFactoryDictionary:Dictionary = new Dictionary(true);
    static private function inputManagerStringFactory(config:IConfiguration):StringTextLineFactory
    {
        var factory:StringTextLineFactory = stringFactoryDictionary[config];
        if (factory == null)
        {
            factory = new StringTextLineFactory(config);
            stringFactoryDictionary[config] = factory;
        }
        return factory;
    }
// Line 1204:
public function compose() {
    // Line 1238:
    var inputManagerFactory:TextLineFactoryBase = (_sourceState == SOURCE_STRING) ? inputManagerStringFactory(_config) : _inputManagerTextFlowFactory;
    // Line 1242:
    inputManagerFactory.swfContext = Configuration.playerEnablesArgoFeatures ? this : _swfContext;
}

Строка 1242 является ключевой строкой, поскольку она дает статическому словарю ссылку на наш компонент.

(Примечание. Я проверил это с помощью отладчика, чтобы подтвердить, какая ветвь троичной системы выполняется.) Это предотвратит сборку мусора экземпляром.

Например: статический словарь имеет значение со ссылкой на экземпляр - экземпляр не может быть GC'd.

В свою очередь, это предотвратит GC'd любые другие экземпляры, имеющие ссылку на экземпляр TextContainerManager.

Хотя эта теория, безусловно, соответствует тому, что я вижу в нашем приложении, я не могу поверить, что в таком низкоуровневом искровом компоненте действительно есть утечка памяти.

Может кто-нибудь пролить свет на это?

Кстати, я открыл дефект на bugs.adobe.com, чтобы отследить эту проблему, если она окажется подлинной ошибкой: https://bugs.adobe.com/jira/browse/SDK-29531

1 Ответ

0 голосов
/ 14 февраля 2011

Я слышал, что есть несколько проблем с памятью, связанных с TLF.Это следует исправить в Flex 4.5 SDK.

Тем временем вы все равно можете открыть заявку на http://bugs.adobe.com/jira/

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