@alzaimar
Den zusätzlichen Funktionsaufruf bei Prefetch=0 ausklammern hat was gebracht, aber nur bei Prefetch=0;
Delphi-Quellcode:
PivotIdx := (LoIndex + HiIndex)
div 2;
PivotFullText := LineFromFile(PivotIdx);
repeat
if FPrefetchSize = 0
then begin
while LineFromFile(LoIdx) < PivotFullText
do Inc(LoIdx);
while PivotFullText < LineFromFile(HiIdx)
do Dec(HiIdx);
end else begin
while CompareLinesExact(LoIdx, PivotIdx) < 0
do Inc(LoIdx);
while CompareLinesExact(PivotIdx, HiIdx) < 0
do Dec(HiIdx);
end;
Prefetch=0 ist jetzt so schnell wie Prefetch=5 (1-4 sind langsamer). Also erst ab Prefetch=5 wird der zusätzliche Vergleich durch den genaueren SpeicherIndex kompensiert.
Ich müsste dann also ab Prefetch=6 auf die alte Methode zurückgreifen, um in jeder Situation am schnellsten zu sein. Kommt aber wohl auch etwas auf die Quelle an.