Sven, Thanks for the reply :) I will try to move my code over to another image (I'm not very good with GitHub - we'll see how this goes). But it just seems like there ought to be a way to at least delete all of these instances - as they are pretty easy to get ahold of (Class allInstancesDo:). But I can't find a way to delete them. I can count them, I can display content - attached is a screenshot showing for each Album instance, I can display it and data from it's embedded Artist and collection of Tracks. Attached are a couple of screen shots of the 'query' I mentioned in my previous note... as you can see - Tracks, Albums, (FileReference is my fault, also - I use those to hand music files to my objects for processing. Those are hanging around as well). On Tue, Mar 31, 2020 at 11:13 AM Sven Van Caekenberghe <sven@stfx.eu> wrote:
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.russ@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.russ@gmail.com
-- Russ Whaley whaley.russ@gmail.com