> in
the removed view I get ride of the listeners in the unload event
The
only 'unload' event I know of in Flex 2 is in SWFLoader. Are your views SWFs
that you're loading into a SWFLoader?
-
Gordon
________________________________________
From:
[EMAIL PROTECTED]ups.com
[mailto:[EMAIL PROTECTED]ups.com]
On Behalf Of Jason Hawryluk
Sent: Friday, June 23, 2006 12:21 AM
To:
[EMAIL PROTECTED]ups.com
Subject:
RE: [flexcoders] Garbage collection and removeChild [Flex 2 beta
3]?
Thank you, this clears some things up. :)
I was actually
allocating memory up to 100mb and then seeing if it's
collected by
letting it sit there with no activity, and watching the process
memory
usage (couldn't think of another way).
"You can later remove a
component from a container using the removeChild()
method. If there
are no references to the component, it is eventually
deleted from memory
by the garbage collection mechanism of Flash Player."
The above taken
from the doc's, lead me to believe that there was a garbage
collection
process every (x)min's. If the player only does this when it
needs to get
back memory, then that would explain why I did not see
it
collected.
What lead me to the question was the following
scenario:
I have a single component based on the viewstack for the
views, this
component listens for event state changes in the program to
load new views,
the events it gets come from another class (think
observer pattern). So with
this I can load multiple copies of a view with
different data(this is where
I seen a problem). Even though a view was
removed from the viewstack it
still received data change events (which it
listens to in order to see if it
needs to load new data (think chain of
responsibility here) where each view
gets the event and decides if the
data is destined for it (the data it self
is just a guid that I use to
reference the xml data needed to be loaded).
The scenario may seem
weird, but no object knows what data is being accessed
except the view
that is responsible for displaying it.
If the view was really
unloaded then the event should not get through. So
now I remove a view,
and in the removed view I get ride of the listeners in
the unload event,
clean up any child objects/classes/data providers etc..
So the
view >> dataprovider >> modelloader >> etc..
>>
controller >> etc..
From what I understand from your answer is
that if the view is removed, and
I clean up the listeners and "local"
references i.e. (set dataprovider and
controller to null)
view
>> dataprovider
>> controller
Then I should be
alright. Is this correct?
My original thinking was that if it's
removed to the garbage collection how
is it that it's still getting the
events? I was thinking that this was a
protected space. I can't get the
instance back from the garbage collection,
however the instance is still
very much alive and kicking.
Is this making sense? Are these correct
assumptions?
Thank you for your
help.
Jason
-----Message d'origine-----
De : [EMAIL PROTECTED]ups.com
[mailto:[EMAIL PROTECTED]ups.com]De
la
part de Gordon Smith
Envoyé : vendredi 23 juin 2006 08:30
À : [EMAIL PROTECTED]ups.com
Objet
: RE: [flexcoders] Garbage collection and removeChild [Flex 2 beta
3]?
> it does not seem to be collected
What are you doing
that you think should cause it to be collected? Do you
keep allocating
memory indefinitely? An object may never get garbage
collected unless the
Player decides it needs the memory.
> Should one have to remove
all objects created through the
> or just on the child being
removed?
I'm not really following your texavery >> toto
>> titi example because you
didn't explain which one you're
removing. Let's suppose you're removing toto
as a child of texavery. If
you're not keeping any references to toto or
titi, then both become
eligible for garbage collection; the fact that toto
holds a reference to
its child titi doesn't matter, because the two of them
are isolated from
all other objects.
> Is there a way to force the garbage
collection clean up,
> or destroy an object completely?
There
are no APIs for controlling garbage collection. Once there are
no
references to an object, it becomes eligible for garbage collection.
It
doesn't mean that it actually gets garbage collected.
Is your
app exhibiting unbounded memory growth to the point where it
consumes all
the machine's memory?
-
Gordon
________________________________________
From:
[EMAIL PROTECTED]ups.com
[mailto:[EMAIL PROTECTED]ups.com]
On
Behalf Of Harald Dehn
Sent: Thursday, June 22, 2006 3:55 AM
To:
[EMAIL PROTECTED]ups.com
Subject:
WG: [flexcoders] Garbage collection and removeChild [Flex 2
beta
3]?
Is there any answer to this thread? I do have the same
problems with the
garbage
collector.
________________________________________
Von:
[EMAIL PROTECTED]ups.com
[mailto:[EMAIL PROTECTED]ups.com]
Im
Auftrag von sourcecoderia
Gesendet: Dienstag, 20. Juni 2006
18:06
An: [EMAIL PROTECTED]ups.com
Betreff:
[flexcoders] Garbage collection and removeChild [Flex 2 beta 3]?
From the
documents when using removeChild the removed display item is
added to the
garbage collection for later removal. However I'm
reusing component
instances and creating new instance of the same (a
sort of tabbed
interface where children are created and removed at
will.
The
listeners for the child component are removed and other objects
set to
null, but; it does not seem to be collected.
Should one have to
remove all objects created through the chain or
just on the child being
removed?
I.e. if I instantiate a class called toto through a
component called
texavery and toto creates an instance of titi do I have
to unload all
objects created by or in the children following the entire
chain
texavery >> toto >> titi
where each one
unloads it's owned/created objects?
Or is this cleaned up from the child
object on down?
Is there a way to force the garbage collection clean
up, or destroy
an object completely?
I did wait to see if it
unloaded 25mins and still no change in the
process memory usage. However
I'm only at this time unloading objects
created by the child component
and not it's children's objects.
So unload the entire chain or just
the first ?
Is removeChild working properly ?
How is this supposed
to work, and are there any best practices in
regards to
this?
Thanks,
Jason