2012-03-21 4 views
1

MFC와 함께 Visual C++ 사용.DeleteAllItems와 함께 LB_INITSTORAGE 사용 하시겠습니까?

이 블로그 (Speeding up adding items to a combobox or listbox)를 기반으로 많은 항목을 추가 할 때 내 목록 상자의 깜박임 현상을 줄이기 위해 SendMessage(hwndListBox, LB_INITSTORAGE, cItems, nBytes);으로 전화를 걸고 싶습니다.

기본적으로이 기술은 목록 상자가 커짐에 따라 계속적으로 메모리를 다시 할당하는 대신 LB_INITSTORAGE을 사용하여 문자열에 필요한 메모리를 모두 한 번에 할당하는 것입니다.

제 질문은 LB_INITSTORAGE 메시지를 사용하여 메모리를 미리 할당 한 다음 목록 상자 컨트롤에 DeleteAllItems()을 호출하면 사전 할당 된 메모리를 해제 할 수 있습니까? 즉, 같은 수의 항목을 목록 상자에 다시 추가하려면 LB_INITSTORAGE 메시지를 다시 보내야합니까?

답변

1

예, 다시 LB_INITSTORAGE을 보내야합니다.

내가 잘못하지 않으면 DeleteAllItems 전화는 LB_RESETCONTENT 메시지를 보내야합니다. 할당 된 메모리를 해제 할 수 있습니다.

LB_DELETESTRING을 여러 개 보내면 메모리가 해제되지는 않지만 확실하지는 않습니다. 처리 속도가 너무 느려지는지 확실하지 않습니다.

어쨌든 이것은 구현 세부 사항입니다. 항목을 추가하기 전에 항상 LB_INITSTORAGE을 보내십시오. 메모리가 할당 해제되는 방법과시기가 지정되지 않았으므로 변경 될 수 있습니다.

관련 문제