Ja, die haben sich Arbeit gespart (2 Sekunden weniger nachdenken müssen), ansonsten ist diese Funktion einfach nur grauenhaft.
Rufe diese Funktion so 300.000 Mal kurz hintereinander auf (mit unseren wenigen Testdaten ... wird mal mehr), da wird dann sinnlos unsere wertvolle Zeit verplempert.
Aktuell: Interne Aufrufe/Weiterleitungen
Delphi-Quellcode:
function StartsStr(const ASubText, AText: string): Boolean; inline;
Result := AnsiStartsStr(ASubText, AText);
Result := AnsiSameStr(ASubText, Copy(AText, 1, Length(ASubText)));
Result := AnsiCompareStr(S1, S2) = 0;
Result := CompareString(LOCALE_USER_DEFAULT, 0, PChar(S1), Length(S1),
PChar(S2), Length(S2)) - CSTR_EQUAL;
Für den/jeden Stringvergleich wird hier eine temporäre Variable angelegt, umkopiert und freigegeben.
Besser (nur prüfen/nichts kopieren):
Delphi-Quellcode:
function StartsStr(const ASubText, AText: string): Boolean; inline;
Result := AnsiStartsStr(ASubText, AText);
Result := CompareString(LOCALE_USER_DEFAULT, 0, PChar(ASubText), Length(ASubText),
PChar(AText), Min(Length(AText), Length(ASubText))) - CSTR_EQUAL;
CompareString hat nicht umsonst eine Angabe für die Längen ... nämlich genu für sowas (Teilvergleiche).
PS: StartsText/AnsiStartsText ist da besser umgesetzt. (hier hätte ich jetzt zwei AnsiLowerCase und ein Copy erwartet
)