1: | var |
1: | var |
1: | s:= '01-Aug-05'; |
![]() | ||
Quelltext
klappt nämlich ned??????? oder was mach ich falsch???? |
Zitat: |
Aber vielleicht musst Du am ShortDateFormat etwas herumspielen. Könnte mir vorstellen, dass anstelle des Slash der (schon einmal definierten) Datumstrenner stehen muss. |
1: | var |
![]() |
Sollte ShortDateFormat nicht 'dd-mmm-yy' sein? |
1: | Function ConvertDate (Const aDate : String) : String; |
1: | procedure TForm1.Button1Click(Sender: TObject); |
![]() |
Also das mit deiner Stringkonstanten und dem copy ist ja wohl das schlechteste, was einem einfallen kann. Unperformanter geht es kaum noch. warum nimmst du nicht ein zwölf elementiges Array? |
Zitat: |
Und wenn Dir das Pos zu lahm sein sollte (wobei ich mich frage, in was für einer Applikation sowas eine Rolle spielt) |
1: | procedure strrepl(subo, subn: String; var s: String); |
1: | strrepl('Jan','01' ,s); |
1: | s:= stringreplace(s, 'Jan','01',[rfReplaceAll , rfIgnoreCase]); |
1: | Function ConvertDate (Const aDate : String) : String; |
1: | Function QuickConvertDate (Const aDate : String) : String; |
1: | // DateConvert |
![]() |
Hi retnyg,
Die Aufgabe war: 03-Aug-05 --> 03.08.05. Was Du hier programmiert hast, ist aber : 03.08.05 --> 03-Aug-05. Das das schneller ist, und man für die Überführung von '08'->'Aug' ein Array nimmt, liegt auf der Hand. |
![]() |
Das lässt sich normalerweise mit Assembler um einige Prozente steigern, oder? |
1: | Function ConvertDate3 (Const aDate : String) : String; |
![]() | ||
ich habe mich einfach an den codeschnipsel von dir gehlaten und den optimiert :mrgreen: |
![]() |
Was mich absolut umhaut ist die Tatsache, das dein ASM lahmer ist, als Delphi. Ich krieg bei ASM immer Pickel also hier meine Frage... obwohl ich die lieber in einem anderen Thread posten würde:
Wird eine Case Anweisung als Jumptable oder als Folge von Abfragen realisiert? |
1: | Case m of |
1: | m := m -3; |
1: | Goto JumpTable [m]; |
![]() | ||
Ich postuliere mal, das eine Anweisung:
Delphi-Quelltext
das iterative Delphi-Compilat doch noch um Längen schlägt... |
1: | // Das hier soll eine Const-Deklaration sein, aber um zu verdeutlichen, wie |
1: | Function QuickConvertDateBack (Const aDate : String) : String; |
1: | SetupDateClassConst; |
1: | Function ConvertDateFastest (Const aDate : String) : String; |
1: | Function QuickConvertDateBack (const aDate : String) : String; |
![]() |
![]() allein die setuproutine bietet noch optmierungsbedarf... |
1: | Const |
1: | Function QuickConvertDateBackAsm (const aDate : String) : String; |
1: | function ConvertDate(const ADate: String): String; |
![]() | ||
*lol* Vielleicht solltest du dich mal mit Delphi beschäftigen. |
![]() |
In meinem Test ist diese Funktion ein kleines bißchen schneller, als retnyg Assembler-Weg. |
![]() |
ausserdem produziert sie 04.1<.05 bei '04-dec-05' |
1: | function ConvertDate(const ADate: String): String; |
1: | procedure TForm1.Button1Click(Sender: TObject); |
1: | procedure TForm1.Button2Click(Sender: TObject); |
1: | function ConvertDate(const ADate: String): String; |
1: | Sprint retnyg |
1: | Function AsmConvertDate (const aDate : String) : String; |
![]() |
@retnyg: Gültige Monatsabkürzungen: Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec sollen es sein. |
![]() |
dein code Sprint ist auch nicht von schlechten eltern, mich wundert nur das die ASM_lösung ungefähr die gleiche Performance bringt (ich hab mal gelert das ASM immer mindestens 20% mehr bringt gilt bei heutigen sachen wohl nicht mehris auch schon 7 Jahre her). |
1: | strtoint(copy(adate, 4,2)) |
1: | if adAte[4] = '0' then m := ord(adate[5])-48 |
1: | mov ECX, dword ptr[EDX] |
![]() |
[highlight] aber mir is was aufgefallen, in der realanwendung der Methode von alzaimar wird oft das Datum falsch umgewandelt, und macht ihn sie somit nutzlos :( vielleicht hab ich ja was flasch kopiert aber manchmal kommen Strings raus wie: '2-.00.5' und so , das is ned so toll, schade jetzt hab ich mich so darauf gefreut das er funzt, mist verdammter :evil: [/highlight] @alzaimar und die anderen vielleicht merkt einer woran das liegt? |
1: | Procedure SetupDateClassConst; |
1: | Const |
![]() |
Trozdem ist mein Code am Schnellsten, auch schneller als das ASM-Zeugs. |
1: | retnyg sprint alzaimar |
1: | procedure TForm1.Button3Click(Sender: TObject); |
![]() |
Mich würde nun noch interessieren, ob eine ASM-Implementierung von meinem Zeugs noch mal was bringt... |
1: | mn := mn shl 8; |
1: | mn := mn and $0000FFFF; |
![]() | ||
Delphi-Quelltext
wir wird gerade ganz schwindelig ;P (ok habs so auch irgendwann mal gemacht) |
![]() |
Poste mal die komplette Test-App, mir scheint es liegt an den Prozessoren. |
1: | S := '04-' + Month[K] + '-05'; |
1: | ConvertDateFastest1 5367: |
![]() |
Ich habe das Testprogramm mal umgeschrieben, damit alle Funktionen hintereinander ablaufen.
Das liefert mein Laptop (PM 1,5 GHZ) |
Zitat: |
ConvertDateFastest1 2125: ConvertDateFastest 2125: AsmConvertDate16bit 1938: AsmConvertDate 1953: sprintConvertDate 2031: spConvertDate3 2047: spConvertDate 2031: ConvertDateFastest1 2125: ConvertDateFastest 2125: AsmConvertDate16bit 1937: AsmConvertDate 1953: sprintConvertDate 2032: spConvertDate3 2046: spConvertDate 2032: |
![]() |
Is schon lustig. Ach, egal. Nimmt sich sowieso alles nix. |
1: | function ConvertDate(const ADate: String): AnsiString; |
1: | function ConvertDate(const ADate: AnsiString): AnsiString; |
1: | function ConvertDate(const ADate: AnsiString): AnsiString; |
![]() |
Meine Motivation lag in diesem Beitrag, dass ich mit der Pascal Syntax den Delphi Compiler dazu bewege, den selben Assembler Code zu erstellen wie es retnyg von Hand geschrieben hat. Das ist mir auch fast geglückt. |
![]() |
Naja, nun weiß ich wenigsten wo man die Case Anweisung in Records sinnvoll einsetzen kann. :wink: |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!