Bei mir Delphi 12.
Der Zeitunterschied verschindet bei mir praktisch, wenn statt '7' nach "77" gesucht wird.
Da in beiden Fällen der gesamte String durchsucht wird, meine Vermutung:
Die vielen Aufrufe von Pos bremsen (sind ja nicht inline).
Die Suche selbst innerhalb von Pos scheint optimal (zumindest in Delphi 12).
Eigentlich wollte ich nur die Verwendung von SetLength demonstrieren, damit man die Anzahl der Ergebnisse nicht vorher raten muss.
Zu "inline"
Könntest Du mal prüfen, ob bei Dir der Aufruf von "Search" tatsächlich "inline" abgewickelt wird.
Bei mir, obwohl als inline deklariert, jedenfalls nicht.
Code:
Mersenne_Main.pas.7011: while Search(SearchFor, SearchIn, Index) do
005B6B61 55 push ebp
005B6B62 8D4DEC lea ecx,[ebp-$14]
005B6B65 8B55F8 mov edx,[ebp-$08]
005B6B68 8B45FC mov eax,[ebp-$04]
005B6B6B E848FFFFFF call Search
005B6B70 59 pop ecx
005B6B71 84C0 test al,al
005B6B73 75B0 jnz $005b6b25