Использование LB_INITSTORAGE с DeleteAllItems? - PullRequest
1 голос
/ 22 марта 2012

Использование Visual C ++ с MFC.

Исходя из этого блога, Ускоряя добавление элементов в комбинированный список или список , я хочу позвонить SendMessage(hwndListBox, LB_INITSTORAGE, cItems, nBytes);, чтобы уменьшить мерцание моего списка, когда я добавляю в него много элементов.

По сути, метод состоит в том, чтобы выделить память, необходимую для строк, сразу, используя LB_INITSTORAGE вместо постоянного перераспределения памяти по мере роста списка.

У меня вопрос послеПредварительно выделенная память с использованием сообщения LB_INITSTORAGE, если я затем вызываю DeleteAllItems() в моем элементе управления listbox, освобождает ли это память, которую я предварительно выделил?Другими словами, если я хочу добавить такое же количество элементов обратно в список, нужно ли мне снова отправлять сообщение LB_INITSTORAGE?

1 Ответ

1 голос
/ 22 марта 2012

Да, вы должны отправить LB_INITSTORAGE еще раз.

Если я не ошибаюсь, при вызове DeleteAllItems следует отправить сообщение LB_RESETCONTENT. может освободить выделенную память.

Я уверен, что память не будет освобождена, если вы отправите несколько LB_DELETESTRING, но я не уверен, что это слишком сильно замедлитprocess.

В любом случае, это более или менее подробная информация о реализации, всегда отправляйте LB_INITSTORAGE, прежде чем добавлять свои элементы: как и когда освобождается память, не указано, поэтому может быть изменено.

...