Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

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

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

  Alt 19. Dez 2011, 13: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 )
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

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