구조체 배열에 대한 QuickSort 정렬 알고리즘을 다시 수정했습니다. 결론은 구조 배열을 정렬하기 위해 간단한 배열 정렬 알고리즘을 직접 적용하면 많은 양의 데이터가 "물리적"으로 이동하게 된다는 것입니다. 이를 피하기 위해 모든 순열이 만들어지는 인덱스 테이블을 사용했습니다. 동시에 다른 코드 최적화를 사용했습니다. 다른 유형에 대한 보편성을 유지하기 위해 fxsaber의 매크로 래퍼를 사용했습니다.
결과적으로 MqlRates[30000] 배열을 8개 필드로 정렬하는 데 14900ms가 아닌 약 3600ms가 소요되었습니다. 4배 이상의 가속도입니다. 정렬 결과를 꼼꼼히 확인하지 않아 베타 테스터에게 맡기기로 했습니다.
그리고 뭐? 이를 위해 별도의 스레드를 시작하시겠습니까?
좋은 생각)))
주제를 열어야합니다 " Turks ... "))))))
모두 주제가 소진되었다고 생각했지만 ...
구조체 배열에 대한 QuickSort 정렬 알고리즘을 다시 수정했습니다. 결론은 구조 배열을 정렬하기 위해 간단한 배열 정렬 알고리즘을 직접 적용하면 많은 양의 데이터가 "물리적"으로 이동하게 된다는 것입니다. 이를 피하기 위해 모든 순열이 만들어지는 인덱스 테이블을 사용했습니다. 동시에 다른 코드 최적화를 사용했습니다. 다른 유형에 대한 보편성을 유지하기 위해 fxsaber의 매크로 래퍼를 사용했습니다.
결과적으로 MqlRates[30000] 배열을 8개 필드로 정렬하는 데 14900ms가 아닌 약 3600ms가 소요되었습니다. 4배 이상의 가속도입니다. 정렬 결과를 꼼꼼히 확인하지 않아 베타 테스터에게 맡기기로 했습니다.
감사합니다. 물론 범용 코드를 위한 fxsaber입니다.
UPD: 명확하지 않은 경우 정렬된 목록의 최상위 구조에 액세스합니다. MqlRates first = Rates[ RatesIdx[0] ];