![]() |
Re: Suche effizienter machen
Zitat:
(Während des showmessages() ist das Programm angehalten. Du stoppst also die Zeit, die du zum schreiben brauchst + Zeit der Funktion) Besser ist es natürlich, die Zeit in einer Variablen zu speichern und nachher die different zu nehemen. Siehe hierzu auch GetTickCount - das ist dann direkt in Millisekunden ;) |
Re: Suche effizienter machen
Hallo jfheins,
Du hast natürlich recht, wenn es Dir um sehr präzise Zeitmessungen geht, aber wenn ich eine Schleife über ein paar tausend Zeilen mache und feststelle, dass dauert 10 Minuten und beim nächsten Mal, nachdem ich das Programm geändert habe, dauert es fünf Minuten, dann reicht meine "manuelle" Stopuhr, gehe hier in dem Beispiel nicht davon aus, dass wir hier irgendwas hochperformantes bauen wollen. Klar könnte man vor der Schleife die Zeit oder Tickcount auf ein Label schreiben, nachher auf ein Anderes und auf ein Drittes die Differenz. Wollte mit komplizierten Beispielen neben dem eigentlichen Problem nicht noch 'nen "Fragenkatalog" aufmachen. :wink: Stephan |
Re: Suche effizienter machen
Wörter sucht man am schnellsten mit einem Dawg oder einer Hashmap ('TStringDictionary'). Such mal hier danach...
|
Re: Suche effizienter machen
Zitat:
@Topic: Hast du mal versucht, den Code zwischen BeginUpdate() und EndUpdate() zu platzieren? Das könnte auch noch einmal schneller sein ;) |
Re: Suche effizienter machen
Hi,
und sorry das ich mich jetzt erst wieder melde^^. Da ich Anfänger bin hab ich leider kein Plan was BeginUpdate() und EndUpdate(). Wo kann ich da Code plazieren oder wie funktioniert das? Aus Internetsuche bin ich da leider auch nicht sonderlich schlau geworden. ebenso wenig aus TStringDictionary. So ganz schlau bin ich da auch nicht draus geworden. Wäre schön wenn da jemand mir noch mal helfen könnte^^ |
Re: Suche effizienter machen
ok, noch mal anderes gefragt
hab noch mal gesucht und bissel was gefunden, wegen dem beginupdate und endupdate. das ganze bringt jetzt, wenn überhaupt eine sekunde gewinn. Hab ich das an der falschen stelle oder falsch verstanden?
Delphi-Quellcode:
b := (text<>'') OR (text2<>'') OR (text3<>'');
if b=true then begin text:=LowerCase(text); text2:=LowerCase(text2); text3:=LowerCase(text3); mmoLines.Lines.BeginUpdate; for ii := 0 to FSelect.Count-1 do begin if FSelect.Strings[ii] <>'' then begin i := Pos( text, LowerCase(FSelect.Strings[ii]) ); if i > 0 then begin mmoLines.SelStart := i+i2-1; mmoLines.SelLength := Length(text); mmoLines.SelAttributes.Color := c; mmoLInes.SelAttributes.Style := [fsBold]; mmoLines.SelLength := 0; end; i := Pos( text2, LowerCase(FSelect.Strings[ii]) ); if i > 0 then begin mmoLines.SelStart := i+i2-1; mmoLines.SelLength := Length(text2); mmoLines.SelAttributes.Color := c2; mmoLInes.SelAttributes.Style := [fsBold]; mmoLines.SelLength := 0; end; i := Pos( text3, LowerCase(FSelect.Strings[ii]) ); if i > 0 then begin mmoLines.SelStart := i+i2-1; mmoLines.SelLength := Length(text3); mmoLines.SelAttributes.Color := c3; mmoLInes.SelAttributes.Style := [fsBold]; mmoLines.SelLength := 0; end; end; i2 := i2+Length(FSelect.Strings[ii])+2; end; mmoLines.Lines.EndUpdate; end; |
Re: Suche effizienter machen
Was ich immer noch nicht verstehe:
Warum ziehst du das mehrfache
Delphi-Quellcode:
nicht vor die Schleife?
LowerCase(FSelect.Strings[ii])
Und das "if b=true then.." sollte man auch nicht tun (vorher wars besser) |
Re: Suche effizienter machen
hi,
1. weil es eh kein gewinn gebracht hat an Zeit 2. wenn ich es einmal davor mache, hat er meinen Text komplett klein gemacht (logisch) nur wenn ich dann was gesucht habe, war der Text auch komplett klein, was mir nichts bringt. Und dann bringt mir mein "groß/kleinschreibung beachten - button" nichts mehr *gg* aber wie gesagt es hat, bei einer ungefähr 500kb großen datei mit ca. 6800 Zeilen, eh nichts gebracht. und wieso war das b=true vorher besser? |
Re: Suche effizienter machen
Für die Geschwindigkeitmessung würde ich folgendermassen vorgehen.
Delphi-Quellcode:
var LBegin,
LEnd: integer; LTime: String; begin LBegin := GetTickCount(); try HierMacheIchDieArbeit(); finally LEnd := GetTickCount; EinLabel.Caption := IntToStr(LEnd - LBegin); end; end; |
Re: Suche effizienter machen
sind das millisekunden?
also auf alle Fälle mal alles durchprobiert: 30282 mit beginupdate/endupdate ohne extra schleife für Lowercase 30578 ohne beginupdate/endupdate ohne extra schleife für Lowercase 30219 mit beginupdate/endupdate mit extra schleife für Lowercase 30906 ohne beginupdate/endupdate mit extra schleife für Lowercase |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz