J'ai un 'framework' dans Flex qui charge et détruit les 'sections' enfants, qui sont des instances de classes de modules. Ceux-ci ont beaucoup de webservice et d'animation en eux et font partie d'un site public. Avant de supprimer une section de l'écran, j'appelle une méthode d'interface 'hideSection()' sur l'instance. Dans cette méthode, je supprime tous les contrôles, ou retourne false si la section veut éviter qu'elle soit fermée. Actuellement, il arrête également toutes les instances de Timer en cours d'exécution.Garbage collection dans Flex lorsque removeChild() est appelé - gestion des conditions de course
Le problème est que même avec l'objet de section retiré de la scène, il peut se passer des choses exceptionnelles. Par exemple, je peux avoir un effet en cours d'exécution où effectEnded déclenche quelque chose, ou peut-être une demande de service web lent peut-être expirer et provoquer une erreur à popup. En raison de la façon dont le garbage collector fonctionne - parfois cet objet objet est tué plus tôt, et d'autres fois plus tard. J'essaie de minimiser les mauvaises choses qui se produisent une fois qu'une section a été fermée.
J'ai trouvé la solution possible suivante. Je me demandais s'il y en avait un meilleur.
- Possédez une propriété _disposed définie sur true. À l'intérieur de n'importe quel gestionnaire d'événement qui pourrait possiblement avoir un comportement indésirable (après la fermeture de la section), je dirais simplement
if (_disposed) { return; }
. - Peut également être nécessaire pour implémenter une interface 'IDisposable', comme dans .NET.
Est-ce vraiment ma seule option - ou puis-je en quelque sorte accélérer le garbage collection. La collecte des ordures peut-elle même se produire s'il y avait encore des effets?
Je suis également curieux de savoir si je devrais régler les choses à _null, en particulier les minuteries. Ou est-il suffisant de stopper() un minuteur pour qu'il soit récupéré si il n'y a plus de références.