Domanda

Durante il tentativo di modernizzare l'aspetto di una vecchia applicazione C ++ Builder / Delphi, ho attivato temi visivi ( stili visivi "nofollow" noreferrer ) e sono rimasto sorpreso di quanto sia molto più di una performance temi successo aggiunto. Ad esempio, per la nostra pagina di impostazione primaria (un 11-tab, 200-controllo di dialogo mostro che non vogliamo rifare in questo momento per ragioni di tempi di sviluppo ei costi di riqualificazione):

  • senza temi abilitati: ~ 0.1 sec per costruire la forma ei suoi controlli (come misurato da QueryPerformanceCounter), ~ 0,9 sec dal clic sulla voce di menu per la forma dell'essere mostrato (come misurato dal cronometro). Non davvero notevole per l'utente finale.
  • Con i temi abilitati: ~ 0,6 sec per costruire la forma ei suoi controlli, ~ 1,5 s dal clic sulla voce di menu per la forma viene mostrato. Molto evidente per l'utente finale.

ottengo risultati simili sia su un desktop di Windows XP e Windows 7 VM.

Mi rendo conto che ci sono passi che ho potuto prendere per migliorare questo caso particolare (ad esempio il caricamento pigramente schede della finestra di dialogo o riprogettare completamente), ma è tipico per i temi per aggiungere un tale successo notevole di prestazioni? Ci sono dei suggerimenti semplici per evitare questo calo di prestazioni?

È stato utile?

Soluzione

Wow. Non sono sicuro che abbia mai avuto 200 controlli su un singolo modulo. Qui ci sono un paio di suggerimenti.

  • Questo potrebbe essere un caso particolare in cui si desidera creare la finestra di una volta quando si avvia l'applicazione e visualizzarli quando necessario, invece di crearlo su richiesta.

  • Mi piacerebbe anche guardare a ciò che sta succedendo nel costruttore o evento OnShow. Stai popolando elenchi in cui BeginUpdate / EndUpdate sarebbe un vantaggio?

  • Avete qualche codice in un evento OnResize o simile che viene sparato più di una volta che potrebbe aspettare fino a dopo la creazione della forma e essere eseguito una volta?

  • Che tipo di controlli stai usando? Se un tipo di controllo dipinge particolarmente lento, potrebbe essere in grado di sostituirlo con uno che dipinge in modo più rapido. Ciò richiederebbe qualche test, però.

Altri suggerimenti

Si potrebbe provare e attivare il doppio buffering sui comandi, abbiamo avuto più o meno lo stesso comportamento, ed è stato un po 'accelerato da questo approccio, ma non avviciniamo le prestazioni prima di adottare supporto applicativo tematizzazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top