I가 선언 된 다차원 동적 배열에 순서 요소 ("일"또는 "밤"열거 형)을 추가하는 루틴 등 :대형 동적 배열 -가 느린
TShiftType = (stDay, stNight);
TScheduleArray = array of array of array [1..DaysPerWeek] of TShiftType;
배열 요소 1 개 (예 : (Day, Day, Day, Day, Day, Night, Night)
)와 요소 20,000 개 이상을 포함 할 수 있습니다. 각 요소는 처리되는 주 수에 따라 하위 요소가있을 수 있습니다.
((stDay, stDay, stDay, stDay, stDay, stNight, stNight), (stDay, stDay, stDay, stDay, stDay, stNight, stNight))
이 매우 빠른 실행 및 요소의 수 (천에서 약) 상대적으로 낮을 때 아주 잘 작동 : 같은
그래서 2 주 배열의 한 요소를 볼 수 있었다. 주와 요소 수가 늘어 나면 배열에 새로운 요소를 추가하기 만하면 (배열의 길이를 1 씩 늘리려면 SetLength
을 호출 한 후) 기하 급수적으로 속도가 느려집니다.
간혹 액세스 위반이 발생합니다. 델파이에서 "오류 찾기"기능을 사용하면 CPU 창에서 @DynArrayAsg
메쏘드로 이동합니다. 그러나 나는 변수를 재 할당하기에 충분한 메모리가 없다면 델파이 도움말에서 얻을 것이라고 말하는 예외를 결코 얻지 못한다 (EOutOfMemory
).
메모리 예상 동작에 대한 액세스 속도가 느려 집니까? 델파이 6을 사용하고 있습니다.
감사합니다 메이슨, 좋은 설명. D2009 (FastMM 부분 용)는 기다리고 있지만 제 3 자 구성 요소가 현재 서 있습니다. 내가 다차원 배열을 가지고있는이 경우 TList가 더 나은 해결책이 될 것이라고 생각합니까? –
아마도 그렇지는 않지만 TList가 구현되는 방식을보고이를 자신의 3 차원 배열 클래스를 작성하기위한 템플릿으로 사용할 수 있습니다. –
감사. 원래 질문에 답한 이유에 대해 감사 드리며 감사드립니다. –