Einzelnen Beitrag anzeigen

Benutzerbild von nTE
nTE

Registriert seit: 8. Sep 2003
60 Beiträge
 
#3

Re: Extremer Speicherfraß durch Strings/StringLists (?)

  Alt 11. Okt 2003, 09:56
Oh nein, das habe ich befürchet.
Ähm.. also der Code ist wirklich ausgesprochen hässlich und ich hoffe mir ist niemand böse, wenn ich ihn auf das Wesentliche beschränke in der Darstellung hier. :P

Delphi-Quellcode:
procedure Scan(Sender: TObject; sSearchStr);
var
  i, j: Integer;
  sSource: TStringList;
  iPos: Cardinal;
  TempStr: AnsiString;
  DF: Textfile;

begin
  if Sender is TEmbeddedWB then
    begin
      sSource := TStringList.Create;
      try
        with Sender as TEmbeddedWB do
          SaveToStrings(sSource);

        iPos := 0;

        // jetzt kämen zwei for-schleifen :P
        //for i := ...
        //for j := ...
            begin
              iPos := NextPos(sSearchStr, sSourceText, iPos + 1);
              TempStr := Copy(sSource.Text, iPos, 250);

              // kopiert die relevante Information (bis zum nächsten '<')
              // übrigens, da Length Integer und NextPos Cardinal zurückliefert, bekomme ich..
              // ..bei jedem Aufruf dieser Art "Vorzeichenbehaftete und -lose Typen werden kombiniert.."
              // aber dagegen kann ich wohl nichts machen oder? ^^;
              TempStr := Copy(TempStr, 1, Length(TempStr) - (Length(TempStr) - NextPos('<', TempStr, 1) + 1));

              Lines[i] := Lines[i] + TempStr;
              // es folgen weitere 2-3 (je nach if Resultat) solcher Zeilen :P
              // ...
            end;
          // das Speichern des Inhaltes, ab und zu mal (if Verzweigung)
          begin
            for i := 2 to 5 do
              begin
                Lines[1] := Lines[1] + Lines[i];
                Lines[i] := '';
              end;

            AssignFile(DF, SAVE_FILE);
            Append(DF);
            Write(DF, Lines[1]);
            Flush(DF);
            CloseFile(DF);
            Lines[1] := '';
          end;
        with Sender as TEmbeddedWB do
          // URL wird abhängig von den gefundenen Ergebnissen verändert um sich durchzunavigieren :P
          Navigate(URL);
      finally
        sSource.Free;
      end;
    end;
end;
Diese Prozedur wird von TEmbeddedWB.OnDownloadComplete aufgerufen und nachdem ich es mal ein paar Stunden laufen ließ, wurde sie bestimmt an die 40000 Mal aufgerufen.

Mmh.. also ich könnte verstehen wenn euch meine Art meinen Code zu präsentieren gelinde gesagt zu blöd ist, aber ich würde mich trotzdem immer über Hilfe freuen. ;)

[edit=Daniel B]Delphi-Tags korrigiert. Mfg, Daniel B[/edit]
  Mit Zitat antworten Zitat