Closed bdwyertech closed 1 year ago
C does not have garbage collection, so I am not sure what this issue is really about. Perhaps try what you think should work, then open an issue if you find it not going as expected, or if you discover a memory leak?
Sure, I'll try and rig up a test harness for this scenario and monitor memory usage. Concern is simply removed menu items consuming resources.
If that approach makes you nervous you could call ResetMenu
and build a new menu instead?
If that approach makes you nervous you could call
ResetMenu
and build a new menu instead?
In this case, these are submenu items. But yes, a reset menu function scoped to a specific submenu would work perfectly. Given the number of menu items and frequency I am updating this submenu (every two seconds) it would be overkill to reload the entire app.
This submenu is monitoring mutagen sessions and their health via icon and status text as the tooltip. Clicking the item will pause/unpause the sync.
Did some testing on my Mac and yes, just nulling things out did cause a memory leak.
It appears that hiding an item on Windows is good enough, so long as it is a leaf (no children).
Windows: RemoveMenu vs DeleteMenu RemoveMenu does not destroy the menu or its handle, allowing the menu to be reused. DeleteMenu deletes an item from the specified menu. If the menu item opens a menu or submenu, this function destroys the handle to the menu or submenu and frees the memory used by the menu or submenu.
I’m not well-versed enough in C/CGO to determine if hiding and nulling a menu or submenu item will trigger it for garbage collection.
If not, this is a feature request to be able to delete a menu/submenu item properly. Use case is multiple dynamic submenus with a background goroutine populating/pruning items.