Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.079 Beiträge
 
Delphi 12 Athens
 
#764

AW: Was nervt euch so, während der Programmierung oder so allgemein

  Alt 19. Dez 2011, 14:29
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;
MSDN-Library durchsuchenCompareString 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 )
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (19. Dez 2011 um 14:48 Uhr)