Hi Russ,

It is quite hard to debug somebody else's application, especially without 
access to the code, but here are some suggestions of what I would do.

Can you move your code to a new/fresh image and see what happens there 
(especially after just one iteration of loading your data) ?

Is there a difference between loading your data and opening your app with 
respect to the retention of garbage ? This would help to determine if this is a 
UI problem or a domain model problem.

There are tools that help you to figure out who holds a specific object 
('Reverse pointers to' in the Inspector) but these are not so easy to use (you 
get lots of data).

Sven

> On 31 Mar 2020, at 16:55, Russ Whaley <whaley.r...@gmail.com> wrote:
> 
> My image size keeps growing and growing.  I've been scouring Google and 
> mailing lists, trying to find a solution.
> 
> Observables:
>       • Running this 'query' shows I have a whole lot instances of Objects 
> I've created that are not "releasing". There are 65000 instances of one 
> Object/Class, and 350,000 of another.  (there are more, these are just the 
> big hitters).
> (Object allSubclasses collect: [ :aClass |
>         aClass -> aClass allInstances size])
>         sort: [ :a :b | a value > b value ].
>       • Each time I load my app/UI - which creates/loads another 5000 of one 
> object and 25,000 of the 2nd object - my Class>>instanceCount(s) keep growing 
> and so does my image size.
>       • I've done:
>               • Smalltalk garbageCollect.
>               • Smalltalk garbageCollectMost.
>               • 10 timesRepeat: [ Smalltalk garbageCollect]. (many, many 
> times)
> Somehow, these instances I create are not 'releasing'.  All of my Classes are 
> direct subclasses of Object.  Interestingly enough, all these objects sit in 
> a single collection for the high-level model - and there are only 67 
> instances of that Object... here's the hierarchy:
> 
> MyTunes - instance holds a Dictionary of Libraries, rootFolder and tags 
> collection
> Library - instance(s) hold Dictionary of Artists & Playlists, tags 
> collection, and MyTunes reference
> Artist - instances hold Dictionary of Albums, and Library reference
> Album - instances hold Dictionary of Tracks, and Artist reference
> Track - instances hold TagInfo, Album reference
> TagInfo - instances hold fileReference and ByteString of ID3 tag info.
> PlayList - instances hold Dictionary of Tracks, Library reference.
> 
> Here's my start code in my app... (I don't know how to use SpApplication, 
> SpPresenter and my model(s) together - this may be part of the problem)..
> 
> start 
> "Override this to start your app"
> "*** I don't know how to use SpApplicatoin, SpPresenter and my model MyTunes 
> ***"
> 
> | myTunes tmpLibrary myPres |
> 
> "where do I store the model -> MyTunes?"
> myTunes := MyTunes new.
> 
> "this is just for testing, but the actual re-load of the library takes 15-20 
> minutes (60,000 files!)"
> tmpLibrary := myTunes readLibraryFromSTONfile. 
> myTunes addLibrary: tmpLibrary.
> 
> "where do I store the presenter -> MyTunesPresenter? "
> myPres := MyTunesPresenter on: tmpLibrary.
> myPres openWithSpec.
>  
> While I'd love help with my App/Pres/Model - my first goal is to stop the 
> rapid growth of my object.
> 
> Questions?
> 
> Thanks!
> Russ Whaley (USA, Ohio)
> 
> -- 
> Russ Whaley
> whaley.r...@gmail.com


Reply via email to