Seite 2 von 2

Verfasst: 12.01.2007 17:38
von Frogger
@edel
Bei deinem Speedtest ist deine Variante am schnellsten aber wenn man es mit Debugger asführt ist die von AND51 schneller (ca. 2x) :shock:

Ist das schon jemandem aufgefallen und wieso ist das so?

Ich mein logisch ist es ja nicht gerade :freak:

Verfasst: 12.01.2007 17:47
von ts-soft
Frogger hat geschrieben: Ich mein logisch ist es ja nicht gerade :freak:
Speedtest mit Debugger hat keinerlei Aussagekraft, glaubs einfach :wink:

Verfasst: 12.01.2007 17:59
von remi_meier
Ach und @AND:
http://www.purebasic-lounge.de/viewtopi ... 2144#42144
Hab ich gerade kurz getippt :mrgreen:

Verfasst: 12.01.2007 20:40
von AND51
Vielen Dank für eure Infos, besonders dir, remi_meier für deine hilfreichen Links, die versteh sogar ich :D



Zur weiteren Diskussion werde ich jedoch einen neuen Thread eröffnen — sozusagen spalte ich damit die hiesigen "offtopic" Diskussion von vornherein ab (Lob, bitte!) <)

»»»»» Zur Diskussion über Unicode, Pointer, Offsets und SizeOf und den ganzen Kram...

Verfasst: 12.01.2007 21:17
von edel
NicTheQuick hat geschrieben:@edel:
Nicht schnell! :allright:

Ich hab noch zwei Alternativen, die allerdings langsamer sind als deine:

Code: Alles auswählen

edel     : 62 ms
ts-soft  : 1047 ms
AND51    : 141 ms
Sirhc    : 2218 ms
NTQ 4    : 203 ms
NTQ 5    : 79 ms
remi     : 125 ms
naja fast :P

Verfasst: 12.01.2007 21:34
von AND51
So, habe nun eine neue Procedure, "myTrim()" erstellt, die 9, 32 und 160 entfernt.

Dies ist die bisher schnellste Prozedur:
@ edel: Deine Prozedur, "TrimEx0()", benötigt bei mir in Unicode als auch in ASCII 47 ms (habe deinen Speedtest genommen und mehrmals ausgeführt, ohne Debugger natürlich).
Meine Procedure, "myTrim()", benötigt nur 31 ms, ab und zu auch mal 32 ms.
Am kürzesten ist meine Procedure auch (8 Zeilen):

Code: Alles auswählen

Procedure.s myTrim(*buffer.Character)
	Protected *ende.Character=*buffer+MemoryStringLength(*buffer)*SizeOf(Character)-SizeOf(Character)
	While *buffer\c = 32 Or *buffer\c = 9 Or *buffer\c = 160
		*buffer+SizeOf(Character)
	Wend
	While *ende\c = 32 Or *ende\c = 9 Or *ende\c = 160
		*ende-SizeOf(Character)
	Wend
	ProcedureReturn PeekS(*buffer, (*ende-*buffer+SizeOf(Character))/SizeOf(Character))
EndProcedure