Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi PosEx? Oder doch lieber Pos? - Performance! (https://www.delphipraxis.net/190021-posex-oder-doch-lieber-pos-performance.html)

himitsu 23. Aug 2016 17:21

AW: PosEx? Oder doch lieber Pos? - Performance!
 
Wobei Google inzwischen gelernt hat und Minderheiten entsprechend verlinkt.
Bei Google suchendelphi posex

Kann aber auch daran liegen, daß Google inzwischen die "bösen" erotischen Webseiten weiter unten einsortiert. :stupid:

Der schöne Günther 23. Aug 2016 17:45

AW: PosEx? Oder doch lieber Pos? - Performance!
 
Wow, selbst die Bilder- und Videosuche ist entsprechend ... harmlos.

Pixel 23. Aug 2016 22:39

AW: PosEx? Oder doch lieber Pos? - Performance!
 
..........nvm

Pixel 24. Aug 2016 20:12

AW: PosEx? Oder doch lieber Pos? - Performance!
 
Liste der Anhänge anzeigen (Anzahl: 3)
Also ich bin kein ASM-Experte aber hab mir das ganze mal im Debugger angeschaut.

Bilder sind im Anhang.

Bei dem Bild "pos" sieht man den kompletten ASM-Code der pos-funktion :stupid:

Die Stringsuche beginnt bei Adresse 00402FE8 "REPNE SCAN BYTE PTR..."
Der ASM-Befehl sucht quasi solange nach einem String bis ECX 0 ist.

Bei Bild "posex_main" fällt erstmal auf dass die Funktion anders anfängt. Von der Stringsuchschleife von pos() sieht man erstmal nichts. Aber: z.B. gibt es bei PosEx() ja den 3. Parameter "Offset" der default auf 1 gesetzt ist. Das sieht man auf dem Bild schön bei Adresse 00407CB1 "CMP ECX,1" und "JNZ SHRT findPosi.00407CC1".

Wenn man das Offset unberührt lässt (also bei default 1) dann wird der jump JNZ - "jump if not zero" auch nicht genommen und wir landen bei Adresse 00407CBA "CALL findPosi.0040398C". Wenn man dem folgt landet man bei Bild "posex2" und jetzt erkennt man, dass wir dort dann wieder bei der Funktion pos() sind.

Also tl;dr: posEx() hat einen jump, ein CMP und ein JNZ mehr als pos() und ist somit langsamer :stupid:. posEx() kann allerdings schneller sein, wenn man das Offset setzt. Ach und: Das ganze hab ich aus Delphi 7 :stupid: :stupid: :stupid:

Edit:// Sorry ich wollte eigtl. meinen Beitrag oben editieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:33 Uhr.
Seite 3 von 3     123   

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