Ho programmato alcune GUI MATLAB (non utilizzando la GUIDA), principalmente per la visualizzazione di immagini e altre semplici operazioni (come la selezione di punti e il tracciamento di alcuni dati dalle immagini).MATLAB: GUI progressivamente sempre più lenta
All'avvio della GUI, tutte le operazioni vengono eseguite rapidamente. Tuttavia, poiché la GUI viene utilizzata (mostrando diversi fotogrammi dai volumi 3D/4D e perfezionando le operazioni sopra menzionate), inizia ad essere progressivamente più lenta, raggiungendo un punto in cui è troppo lenta per un uso comune.
mi piacerebbe sentire qualche contributo per quanto riguarda:
- possibili strategie per scoprire il motivo per cui l'interfaccia grafica è sempre più lento;
- Buone pratiche di programmazione GUI MATLAB per evitare questo;
- Possibili riferimenti che risolvono questi problemi.
Sto usando set/getappdata per salvare le variabili nella figura principale della GUI e comunicare tra le funzioni.
(Vorrei poter fornire un esempio di lavoro minimo, ma non credo che è adatto in questo caso, perché questo accade solo in GUI un po 'più complesse.)
Grazie mille.
EDIT:(Segnalazione di nuovo alcuni reperti utilizzando il profiler :)
ho usato il profiler in due occasioni:
- subito dopo l'avvio del GUI;
- dopo aver giocato con esso per un po 'di tempo, finché non ha iniziato a diventare troppo lento.
ho eseguita la stessa procedura esatta in entrambe le operazioni di profilatura, che è stato semplicemente spostando il mouse attorno alla GUI (stesso "percorso" entrambe le volte).
I risultati profiler sono i seguenti:
Sto avendo difficoltà di interpretazione di questi risultati ... Perché è il numero di chiamate di alcune funzioni (come ad esempio impixelinfo
) in modo più grande nel secondo caso?
Qualche opinione?
Grazie mille.
Prova questo: forceGarbageCollection(). Questa è una specie di cosa correlata a Java. –
Hai provato a monitorare l'utilizzo della memoria mentre esegui la GUI per periodi prolungati? È in genere molto alto o, ad esempio, aumenta gradualmente nel tempo man mano che la GUI rallenta? Stai usando solo MATLAB o stai chiamando Java o il codice MEXed C da qualche parte? Stai usando variabili MATLAB regolari o stai usando oggetti e, in caso affermativo, valgono o gestiscono oggetti di classe? –
@SamRoberts: No, non ho provato a monitorare l'utilizzo della memoria durante l'esecuzione della GUI. Farà e segnalerà. Per quanto riguarda le altre domande, sto solo usando MATLAB e solo variabili regolari. Grazie. – fnery