2012-10-17 3 views
8

TObjectList (Delphi 2007)를 사용하여 많은 데이터를 저장하고 있습니다. 약 30 만 개 이상의 요소가 있어야합니다. 그러나 목록을 만들 때 기본 크기는 네 개의 요소 만 저장하도록 설정되고 다섯 번째 요소를 추가하려고하면 여덟 개를, 세 번째 요소를 추가하려고하면 여덟 개를 추가하려고하면 기본 크기가 설정됩니다. 번호는 꺼져있을 수도 있지만 작동이 정확하다고 생각합니다. 이 문제는 모든 요소를 ​​메모리의 할당 해제 부분에서 새로운 확장 목록이 마이그레이션되는 새 메모리 블록으로 복사해야한다는 것입니다. 특정 초기 크기를 설정하고 할당 취소/할당 예약되지 않은 공간을 예약하고 할당하기 때문에 할당 취소 (또는 메모리 예약 취소) 싶습니다. 이것은 아마도 많은 코드가 아니지만이 문제에 대한 영구적이고 견고한 참조가 질문과 답변 형태로 이루어져야한다고 생각합니다.대형 TObjectList 사용 및 사용되지 않는 부분 할당 취소

답변

12

Capacity을 예상되는 가장 많은 수로 설정하고 목록을 채운 다음 Capacity을 실제로 사용한 것 (선택 사항)으로 설정하십시오. 이렇게하면 할당/이동/할당/이동 작업을 모두 피할 수 있습니다.

MyList.Capacity := 300000; 
// Add 280000 items here 

// Optionally, reduce the capacity. It's not important to do so unless 
// you end up with a lot of unused items. 
MyList.Capacity := MyList.Count; 
+0

괜찮습니다. 감사합니다. – programstinator