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