Delphi-PRAXiS
Seite 2 von 3     12 3      

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)

dGeek 23. Aug 2016 10:07

AW: PosEx? Oder doch lieber Pos? - Performance!
 
Zitat:

Zitat von Stevie (Beitrag 1345453)
in XE schien Pos enorm langsam zu sein und nicht etwa PosEx schneller

Also entweder bin ich müde, oder ich beherrsche die deutsche Sprache nicht. Ist das hier nicht doppelt gemoppelt?
Du sagst, Pos scheint enorm langsam zu sein, und dass PosEx nicht schneller ist. Was ist denn nun schneller gewesen bei deinem Test :-D

Stevie 23. Aug 2016 10:35

AW: PosEx? Oder doch lieber Pos? - Performance!
 
Zitat:

Zitat von dGeek (Beitrag 1345458)
Zitat:

Zitat von Stevie (Beitrag 1345453)
in XE schien Pos enorm langsam zu sein und nicht etwa PosEx schneller

Also entweder bin ich müde, oder ich beherrsche die deutsche Sprache nicht. Ist das hier nicht doppelt gemoppelt?
Du sagst, Pos scheint enorm langsam zu sein, und dass PosEx nicht schneller ist. Was ist denn nun schneller gewesen bei deinem Test :-D

Ich wollte damit deine Aussage
Zitat:

Zitat von dGeek (Beitrag 1345425)
Ich habe entdeckt, dass PosEx() viel schneller arbeitet als Pos().

in Relation zu den neueren Delphi Versionen stellen - insofern: Pos (in XE) arbeitet viel langsamer als PosEx (was genauso schnell arbeitet wie Pos in neueren Versionen).

In Spring haben wir übrigens folgenden Code:
Delphi-Quellcode:
{$IFNDEF DELPHIXE3_UP}
function Pos(const SubStr, Str: UnicodeString; Offset: Integer): Integer;
asm
  jmp PosEx
end;
{$ENDIF}
:mrgreen:

dGeek 23. Aug 2016 10:39

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

Zur Frage, welchen offSet ich bei PosEx verwenden würde: ich benutze gar keinen. Ich gebe keinen an, also gilt 1.

p80286 23. Aug 2016 11:43

AW: PosEx? Oder doch lieber Pos? - Performance!
 
Ich habe Günthers Code mit kleinen Abweichungen (TStopwatch ist unbekannt)
durch D2006 und D7 gejagt


D2006 pos: 0,024 posex:0,024 s

D7 pos:0,152 posex 0,147 s

und hier der code:
Delphi-Quellcode:
program Project2;

{$APPTYPE CONSOLE}

{$R *.res}

uses SysUtils
 ,strutils
 ;

const
  s1 = 'Hallo Welt';
  s2 = 'lo';

  count = 2E6;

//{$Define Posex}

var
    times: Integer;
    result: Integer;
    sz,ez : tdatetime;
begin
    times := 0;
    sz:=now;
    repeat
       {$If Defined(Posex)}
          result := PosEx(s2, s1);
       {$Else}
          result := System.Pos(s2, s1);
       {$IFEnd}
       Inc(times);
    until (times = count);
    ez:=now;

    Writeln(formatdatetime('HH:MM:SS,zz', ez-sz) );
    readln;
end.
Packt man noch 40 Leerzeichen an den Anfang von S1, dann ist das Verhältnis 0,201/0,198.
Es scheint wohl wieder zu gelten: "wer misst, misst Mist"


Gruß
K-H

Stevie 23. Aug 2016 12:00

AW: PosEx? Oder doch lieber Pos? - Performance!
 
Beides Pre-Unicode Versionen, somit: Äpfel <> Birnen

Außerdem ist mit Now messen auch Tinnef.

p80286 23. Aug 2016 12:26

AW: PosEx? Oder doch lieber Pos? - Performance!
 
In beiden Fällen werden Ansis verglichen, das sind Äpfel oder Birnen aus dem gleichen Korb.
Die Ausgangsfrage war gibt es einen Unterschied zwischen pos und posex, was implizit "beim gleichen Compiler beinhaltet"?
Und im Rahmen der Meßgenauigkeit kann ich Dir sagen für D2006 und D7 gilt nein.

Gruß
K-H

himitsu 23. Aug 2016 14:26

AW: PosEx? Oder doch lieber Pos? - Performance!
 
Also "früher" gab es im Delphi kein PoSex, darum brauchte man eine eigene/fremde Implementation. (bis um Delphi 6/7 rum, irgendwann)
Aber spater war die Implementation von PosEx eigentlich fast identisch mit Pos... nur noch weitere Parameter, dessen Bereichsprüfung und dann ein anderer einstieg in die Suchschleife (loop).

Also Eigentlich sollte das PosEx einen "Hauch" von wenigen CPU-Zyklen langsamer sein.


Dann hatte man das FastCode-Projekt teilweise in Delphi integriert und k.A. wie es dann war.

Und jetzt klingt es so, als wenn man Pos durch PosEx ersetzt hat, was ja im Prinzip auch praktisch keinen Unterschied macht, wenn beides "gleich" implementiert war.

Der schöne Günther 23. Aug 2016 15:32

AW: PosEx? Oder doch lieber Pos? - Performance!
 
Ich liebe es wie sich hier bei dieser Routine auf einmal alle so viel Mühe geben die Groß/Kleinschreibung zu beachten :mrgreen:

p80286 23. Aug 2016 15:40

AW: PosEx? Oder doch lieber Pos? - Performance!
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1345525)
Ich liebe es wie sich hier bei dieser Routine auf einmal alle so viel Mühe geben die Groß/Kleinschreibung zu beachten :mrgreen:

Das verstehe ich aber nicht :stupid:

Gruß
K-H

P.S.
Laut den Sourcen ist das PosEx in D7 aus dem FastCode-Projekt.

Zacherl 23. Aug 2016 17:00

AW: PosEx? Oder doch lieber Pos? - Performance!
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1345525)
Ich liebe es wie sich hier bei dieser Routine auf einmal alle so viel Mühe geben die Groß/Kleinschreibung zu beachten :mrgreen:

Empfiehlt sich auch keinesfalls nach dieser Routine zu Googlen :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:45 Uhr.
Seite 2 von 3     12 3      

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