Re: MacOS Tahoe painfully slow a wxChoice containing 6k entries.

Tony Kennedy <[email protected]> Wed, 10 Dec 2025 02:12:32 -0800 (PST)
Newsgroups gmane.comp.lib.wxwindows.general
Message-ID <[email protected]>
An update as this potentially impacts all MacOS controls that have a NSMenu 
internally.

I had a feeling it was "Spotlight" that was the problem based 
on https://discussions.apple.com/thread/256145409?sortBy=rank.

Using chatgpt (I'm not familiar with Apple and Spotlight which seems to be 
the cause of the problem), it gave me a workaround.

From chatgpt,
On macOS, wxChoice is implemented using a *native NSPopUpButton*, which 
internally creates an *NSMenu* with 6000 NSMenuItems. macOS 
Spotlight/Accessibility *automatically scans every NSMenuItem* for metadata 
every time the menu changes — especially when

   - 
   
   clearing all items
   - 
   
   recreating items
   - 
   
   calling Clear()
   - 
   
   calling Append() thousands of times
   
This is why your app hangs for *60+ seconds*.


Two solutions.

1. Don't use "Clear", instead create a wxArrayString object, add all the 
strings and then call pChoice->Set(items);


2. Replace wxChoice with wxOwnerDrawnComboBox.
#if defined(__WXMAC__)
    #define WX_CHOICE wxOwnerDrawnComboBox
    #define WX_CHOICE_FLAGS(parent, id, value, pos, size, choices, style) \
        wxOwnerDrawnComboBox(parent, id, value, pos, size, choices, style)
#else
    #define WX_CHOICE wxChoice
    #define WX_CHOICE_FLAGS(parent, id, value, pos, size, choices, style) \
        wxChoice(parent, id, value, pos, size, choices, style)
#endif

and then replace

wxChoice* myChoice = new wxChoice(this, wxID_ANY, wxDefaultPosition, 
wxDefaultSize, items);

with

WX_CHOICE* myChoice = WX_CHOICE_FLAGS(this, wxID_ANY, wxEmptyString,
                                      wxDefaultPosition, wxDefaultSize,
                                      items, 0);












On Wednesday, 10 December 2025 at 09:31:15 UTC Tony Kennedy wrote:

> Hi all,
>
> Using MacOS Tahoe and wx 3.3.0.0.
>
> A user has reported that there is a crazy slowdown when using MacOS Tahoe.
>
> The offending line in my code is 
>
> m_pChoice->Clear();
>
> The wxChoice control has 6500 entries and takes approximately a minute to 
> clear all entries.
>
> Has anyone else experienced something similar?
>
> All is fine on both Windows and other versions of MacOS. And previous 
> versions of my app that used earlier wx (3.2.6) is also fine.
>
> Any advice would be very welcome.
>
> Thanks in advance,
>
> Tony.
>
>

-- 
Please read https://www.wxwidgets.org/support/mlhowto.htm before posting.
--- 
You received this message because you are subscribed to the Google Groups "wx-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
To view this discussion visit https://groups.google.com/d/msgid/wx-users/2cce6ecd-7c86-4a2b-8598-058278ae037en%40googlegroups.com.