[ borovac @ 15.10.2005. 19:46 ] @
Koja je najbrža pretraga stringa? Ja to radim ovako: Code: l1:=length(str1); l2:=length(str2); for i:=1 to l1 do if copy(str1, i, l2)=str2 then begin ... end; Da li je brže ako se koristi pos funkcija? |
[ borovac @ 15.10.2005. 19:46 ] @
[ Nemanja Avramović @ 15.10.2005. 22:57 ] @
pa nisam bash merio vreme ali (ne znam zasto) mislim da je pos brzha
[ morlic @ 15.10.2005. 23:23 ] @
Naravno da je brzi jer Pos() ne pravi nove stringove u memoriji kao sto to radi tvoja Copy() varijanta.
[ nikola.j @ 15.10.2005. 23:35 ] @
>
Ako ti je brzina bas bitna, uzmi faststrings unit od Petera Morrissa (free) koji je par puta brzi od standardnih delphi varijanti. Sajt je www.droopyeyes.com a tamo kaze: "A useful set of assembly optimised string manipulation routines. The most remarkable of these is without a doubt the FastReplace function. StringReplace took over 8 hours to complete multiple replacements on a 10mb string, whereas FastReplace took 0.5 seconds (yes, half of a second)." [ morlic @ 15.10.2005. 23:47 ] @
Da dopunim :)
Varijanta sa Copy() generise nekoliko puta duzi masinski kod od Pos() varijante i vrsi interno pozivanje nekoliko procedura (npr. LStrLen, LStrCopy itd.) sto rezultuje sporijim kodom (postavljanje parametara na stek, dodatno "diranje" memorije itd.). [ Rapaic Rajko @ 17.10.2005. 14:16 ] @
Pos() je cisto asemblerska rutina; pogledati unit System.pas. Od ovoga tesko da ima brze.
Rajko [ Nemanja Avramović @ 17.10.2005. 18:03 ] @
[zezanje]ovo je brzhe:
1000101010010111100101010010100000101001011111010010100100111000[/zezanje] hehehe... eto, nisam ni znao da je POS asemblerska rutina, ali u svakom slucaju sam pretpostavljao da je to brze od tvog nacina gore... inace ne bi Pos(); ni postojala... [ borovac @ 17.10.2005. 18:49 ] @
Baš vam hvala. Pos je funkcija u kompajleru, nema soursa (delphi 7)
hvala [ Rapaic Rajko @ 18.10.2005. 22:18 ] @
Naravno da ima source. Ako ne mozes da nadjes unit System, onda otvori neki tvoj unit, pa u uses deo dodaj "System". Zatim desni klik na tu rec, pa 'Open file at cursor'. Kad ti otvori, trazi 'pos{' (nije greska: viticasta zagrada). Naci ces vise verzija funkcije, vec prema tipu stringa (short, long/Ansi, wide...). Kompajler bira koju ce funkciju pozvati i to je to.
Rajko Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|