Einzelnen Beitrag anzeigen

Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#14

AW: Performanteste Möglichkeit zur Prüfung ob zwei StringListen den gleichen Inhalt h

  Alt 28. Feb 2017, 10:29
Du solltest vielleicht mal ausrechnen, wie schnell du aktuell bist.
Also du musst ja beide Listen komplett aud dem RAM in die CPU schaufeln, das heißt irgendwann kommst du da an das Limit von der Geschwindigkeit des RAM.
Wenn die Lösung aus #9 da in die Nähe kommt, ist da eigentlich nicht viel zu verbessern.

Falls sie es nicht tut, und es noch schneller gehe soll, müsstest du wohl auf assembler gehen und mit SSE-Anweisungen mehrere Bytes auf einmal vergleichen.

Alternativ könntest du probieren, ein paar Durchläufe der Schleife zusammenzufassen. In etwa so:
Delphi-Quellcode:
var
  i: Integer;
  maxi: Integer;
begin
  Result := sl1.Count = sl2.Count;
  i := 0;
  maxi = (sl1.Count div 4) * 4;

  while Result and (i < maxi) do
  begin
    Result := Result or (sl1[i+0] = sl2[i+0]);
    Result := Result or (sl1[i+1] = sl2[i+1]);
    Result := Result or (sl1[i+2] = sl2[i+2]);
    Result := Result or (sl1[i+3] = sl2[i+3]);
    Inc(i, 4);
  end;
  
  while Result and (i < sl1.Count) do
  begin
    Result := sl1[i] = sl2[i];
    Inc(i);
  end;
end;
Keine Ahnung, ob der Compiler soetwas inzwischen automatisch macht, aber das könnte noch ein paar Prozent Unterschied bringen.
  Mit Zitat antworten Zitat