Question

Tout en essayant de moderniser l'apparence d'une ancienne application C ++ Builder / Delphi, j'ENABLED des thèmes visuels ( noreferrer styles visuels ) et a été surpris de voir à quel point d'un des thèmes de vie performances ajouté. Par exemple, pour notre page de configuration principale (un 11-onglet, dialogue monstre 200 contrôle que nous ne voulons pas refaire ce moment pour des raisons de temps de développement et les coûts de recyclage):

  • Sans thèmes activés: ~ 0,1 s pour construire la forme et de ses commandes (tel que mesuré par QueryPerformanceCounter), ~ 0,9 s de cliquer sur l'option de menu à la forme étant représenté (tel que mesuré par le chronomètre). Pas vraiment perceptible à l'utilisateur final.
  • Avec des thèmes activés: ~ 0,6 sec pour construire la forme et de ses contrôles, ~ 1,5 sec en cliquant sur l'élément de menu à la forme étant représentée. Très sensible à l'utilisateur final.

Je reçois des résultats similaires sur un ordinateur de bureau à la fois Windows XP et Windows 7 VM.

Je me rends compte qu'il ya des étapes que je pourrais prendre pour améliorer ce cas particulier (comme le chargement paresseusement les onglets de la boîte de dialogue ou redessiner complètement), mais est-ce typique des thèmes d'ajouter un tel succès notable de la performance? Y a-t-il des suggestions faciles pour éviter cette perte de performance?

Était-ce utile?

La solution

Wow. Je ne suis pas sûr que j'ai jamais eu 200 contrôles sur un seul formulaire. Voici quelques suggestions.

  • Cela peut être un cas particulier où vous voulez créer la boîte de dialogue une fois que lorsque l'application démarre et l'afficher au besoin au lieu de créer sur demande.

  • Je regarde aussi ce qui se passe dans le constructeur ou d'un événement OnShow. Est-ce que vous peuplez des listes où BeginUpdate / EndUpdate serait un avantage?

  • Vous avez un code dans un événement OnResize ou similaire qui obtient tiré plus d'une fois que pourrait attendre après la création du formulaire et être exécuté une fois?

  • Quel genre de contrôles utilisez-vous? Si un type de contrôle peint particulièrement lentement, vous pourriez être en mesure de le remplacer par celui qui peint plus rapidement. Cela nécessiterait des tests, cependant.

Autres conseils

Vous pouvez essayer et allumer Doublebuffering sur les contrôles, nous avons eu beaucoup le même comportement, et il a été un peu accéléré par cette approche, mais n'a pas abordé la performance avant d'adopter le soutien de thématisation d'application.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top