2008-11-10 2 views
3

У меня есть диалог с несколькими большими комбо-боксами (возможно, несколько сотен штук за штуку). Там есть заметная задержка при строительстве, пока они заполнены (подтверждается, что это их профилирование).Медленная производительность AddString в MFC

Моя первоначальная мысль заключалась в том, что сортировка убивала ее производительность, но отключение сортировки и использование InsertString, похоже, не улучшают ситуацию. Я не думал, что это похоже на чрезмерное количество предметов - есть ли что-то еще, что я должен делать или рассматривать здесь?

Звонки MFC - это тривиальные обертки для вызовов сообщений Win32, поэтому я не думаю, что там есть значительные накладные расходы.

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 такой же вопрос plz close – yesraaj 2008-11-10 08:10:11

ответ

10

Вы должны использовать CWnd :: SetRedraw вокруг вашего добавляет, чтобы предотвратить контроль обновляя все свое внутреннее состояние после каждого добавления.

Если вы еще не делаете это, то сделать это:

combo.SetRedraw(FALSE); 

... All the adds 

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

Вы должны также рассмотреть возможность использования функции CComboBox::InitStorage, которая предварительно выделяет память для комбо-бокс.

Смежные вопросы