2008-11-10 4 views
3

J'ai un dialogue avec plusieurs grandes listes déroulantes (peut-être plusieurs centaines d'éléments). Il y a un retard notable à la construction pendant que ceux-ci sont peuplés (confirmé que c'est par profilage). Ma première pensée était que le tri était en train de tuer ses performances, mais désactiver le tri et utiliser InsertString ne semble pas améliorer les choses. Je n'avais pas pensé que cela semblait être un nombre excessif d'objets - y a-t-il autre chose que je devrais faire ou considérer ici? Les appels MFC sont des wrappers triviaux aux appels de message Win32, donc je ne pense pas qu'il y ait une surcharge significative là-bas.Lenteur de la fonction AddString dans le MFC

DUPLICATE How to load a large array of strings in to an MFC combobox control fast as possible?

+0

http://stackoverflow.com/questions/229395/how-to-load-string-of-array-in-to-combobox-faster-in-mfc même question plz close – yesraaj

Répondre

10

Vous devez utiliser CWnd :: setRedraw autour de votre ajoute, pour empêcher le contrôle de mise à jour tout son état interne après chaque ajouter.

Si vous n'êtes pas déjà le faire, faites ceci:

combo.SetRedraw(FALSE); 

... All the adds 

combo.SetRedraw(TRUE); 
combo.Invalidate(); 

Vous devriez également envisager d'utiliser la fonction CComboBox::InitStorage, qui préalloue mémoire pour la zone de liste déroulante.