Lost memory while DnD [message #204065] |
Wed, 30 November 2005 07:16 |
Eclipse User |
|
|
|
Originally posted by: PhilippMarx.gmx.de
Hello,
in my graphical editor you can drag around the shapes. If you drop them on
another shape, they are connected to this shape. After the drop I update
my model, and set the changed model as the new input of my graphical
viewer (I need to do the update due to performance issues, so I cant just
update the views).
My problem is that after each drag there must be somewhere references to
the old views, editdomain or whatever. I am loosing about 10mb of heap
every drag. 10mb is about the size of my diagram objects (as I analyzed
with a profiler).
If I perform a drag in my outlineview there is no heap memory lost (there
the graphical representation is updated and not replaced).
So anybody knows what the problem could be?
PS: I am using the DragEditPartsTracker from the
AbstractGraphicalEditPart.
thx in advance
|
|
|
Re: Lost memory while DnD [message #204151 is a reply to message #204065] |
Wed, 30 November 2005 15:02 |
Eclipse User |
|
|
|
Originally posted by: Lamont_Gilbert.rigidsoftware.com
Philipp Marx wrote:
> Hello,
>
> in my graphical editor you can drag around the shapes. If you drop them
> on another shape, they are connected to this shape. After the drop I
> update my model, and set the changed model as the new input of my
> graphical viewer (I need to do the update due to performance issues, so
> I cant just update the views).
> My problem is that after each drag there must be somewhere references to
> the old views, editdomain or whatever. I am loosing about 10mb of heap
> every drag. 10mb is about the size of my diagram objects (as I analyzed
> with a profiler).
> If I perform a drag in my outlineview there is no heap memory lost
> (there the graphical representation is updated and not replaced).
>
> So anybody knows what the problem could be?
>
> PS: I am using the DragEditPartsTracker from the AbstractGraphicalEditPart.
> thx in advance
>
Are these operations undoable? Are you creating a new 'input' for the
view, or manually swapping out the editpart for it? I don't think its a
good idea to change the input to the graphical viewer. Why not just
make the current input mutable?
at least thats not how I would do it.
CL
|
|
|
Re: Lost memory while DnD [message #204225 is a reply to message #204151] |
Thu, 01 December 2005 07:21 |
Eclipse User |
|
|
|
Originally posted by: PhilippMarx.gmx.de
Yes the operation is undoable.
I create a complete new model and set it as the new content via
GraphicalViewer#setContent.
I need to do so because of performance issues. I tried the other way with
updating the model, but this takes far longer, than setting a new content.
The problem is that I got about 15.000 graphical elements, which are shown
in a structured layout. If I add a new element in between somewhere,
nearly the whole diagramm needs to be redrawn. And this goes faster with
setting a new input.
|
|
|
Re: Lost memory while DnD [message #204240 is a reply to message #204225] |
Thu, 01 December 2005 14:18 |
Eclipse User |
|
|
|
Originally posted by: Lamont_Gilbert.rigidsoftware.com
Philipp Marx wrote:
> Yes the operation is undoable.
>
> I create a complete new model and set it as the new content via
> GraphicalViewer#setContent.
> I need to do so because of performance issues. I tried the other way
> with updating the model, but this takes far longer, than setting a new
> content. The problem is that I got about 15.000 graphical elements,
> which are shown in a structured layout. If I add a new element in
> between somewhere, nearly the whole diagramm needs to be redrawn. And
> this goes faster with setting a new input.
>
Maybe you should reconsider what model is your root model. I still
thing its worse performance wise to change the editor input just because
the model changed.
Anyway, when you make this change be sure to flush the command buffer
since after the change the undoable actions are no longer undoable, are
they?
CL
|
|
|
Re: Lost memory while DnD [message #204285 is a reply to message #204240] |
Thu, 01 December 2005 18:31 |
Eclipse User |
|
|
|
"CL [dnoyeb] Gilbert" <Lamont_Gilbert@rigidsoftware.com> schrieb im
Newsbeitrag news:dmn0ob$9kv$2@news.eclipse.org...
> Philipp Marx wrote:
> > Yes the operation is undoable.
> >
> > I create a complete new model and set it as the new content via
> > GraphicalViewer#setContent.
> > I need to do so because of performance issues. I tried the other way
> > with updating the model, but this takes far longer, than setting a new
> > content. The problem is that I got about 15.000 graphical elements,
> > which are shown in a structured layout. If I add a new element in
> > between somewhere, nearly the whole diagramm needs to be redrawn. And
> > this goes faster with setting a new input.
> >
>
> Maybe you should reconsider what model is your root model. I still
> thing its worse performance wise to change the editor input just because
> the model changed.
>
> Anyway, when you make this change be sure to flush the command buffer
> since after the change the undoable actions are no longer undoable, are
> they?
>
>
> CL
No,
the model-objects are always the same. There is only a of
"father-son"-relaitionship changing on a drag. What I meant by setting a new
content is, that the old model is "again" set as the new content of the
graphical viewer. As I said I tried the other way via updating the views,
but it took far longer.
The commands are undoable afterwards, because they know about the changes in
the model (which is always the same).
This works out pretty good for all other actions I do, like Cut and Paste,
etc. When I cut an element, I do the same as I do when dragging (delete the
element from the model, and setting the model as the new content). There are
never any memory losses.
When I profiled the heap while dragging, I figured out that the number of
views and editpart is increasing every time I perform a drag. My own command
and action do not hold any references to those views and editparts.....
PM
|
|
|
|
Re: Lost memory while DnD [message #204408 is a reply to message #204285] |
Fri, 02 December 2005 14:40 |
Eclipse User |
|
|
|
Originally posted by: Lamont_Gilbert.rigidsoftware.com
Philipp Marx wrote:
> "CL [dnoyeb] Gilbert" <Lamont_Gilbert@rigidsoftware.com> schrieb im
> Newsbeitrag news:dmn0ob$9kv$2@news.eclipse.org...
>
>>Philipp Marx wrote:
>>
>>>Yes the operation is undoable.
>>>
>>>I create a complete new model and set it as the new content via
>>>GraphicalViewer#setContent.
>>>I need to do so because of performance issues. I tried the other way
>>>with updating the model, but this takes far longer, than setting a new
>>>content. The problem is that I got about 15.000 graphical elements,
>>>which are shown in a structured layout. If I add a new element in
>>>between somewhere, nearly the whole diagramm needs to be redrawn. And
>>>this goes faster with setting a new input.
>>>
>>
>>Maybe you should reconsider what model is your root model. I still
>>thing its worse performance wise to change the editor input just because
>>the model changed.
>>
>>Anyway, when you make this change be sure to flush the command buffer
>>since after the change the undoable actions are no longer undoable, are
>>they?
>>
>>
>>CL
>
>
>
> No,
>
> the model-objects are always the same. There is only a of
> "father-son"-relaitionship changing on a drag. What I meant by setting a new
> content is, that the old model is "again" set as the new content of the
> graphical viewer. As I said I tried the other way via updating the views,
> but it took far longer.
> The commands are undoable afterwards, because they know about the changes in
> the model (which is always the same).
> This works out pretty good for all other actions I do, like Cut and Paste,
> etc. When I cut an element, I do the same as I do when dragging (delete the
> element from the model, and setting the model as the new content). There are
> never any memory losses.
>
> When I profiled the heap while dragging, I figured out that the number of
> views and editpart is increasing every time I perform a drag. My own command
> and action do not hold any references to those views and editparts.....
>
> PM
>
>
>
>
>
Well all I can say is I think you are taking the wrong approach. You
should not be changing the editor input. If you do that you should be
dumping the command buffer. The command buffer likely holds onto your
old models as it needs them to undo stuff. so that would explain your
extra memory.
You should find another way to make the visual update faster than
swapping out the model. Perhaps you need a different 'root model' and
you can just change the child of the root model so you dont have to
change the editor input. I don't think the architecture will continue
to be friendly to the way you are changing your editor input. Its sort
of against the grain IMHO.
CL
|
|
|
Powered by
FUDForum. Page generated in 1.03048 seconds