Geschwindigkeit
Geschwindigkeit
Hallo
Beschäftige mich seit einigen Monaten mit PureBasic. Die Grundidee, einem Basic-Syntax in Assembler umzuwandeln finde ich genial. Deshalb hab ich mich entschlossen, diese Programmiersprache zu kaufen.
Nach den ersten Anfangsschwierigkeiten läuft es sehr gut mit den ersten Programmen.
Was mir aufgefallen ist, PureBasic ist viel zu langsam.
Gleiche operationen in einer anderen Sprache wie z.B. Autoit sind wesentlich schneller.
Nach meiner Messung teilweise um die 20-30%.
Jetzt wird Autoit nicht umgewandelt, sondern nur das Script in die .Exe gepackt, ist das schon verwunderlich.
Das enttäuscht schon sehr. Jetzt möcht ich nicht gleich Aufgeben, weil die Idee von PureBasic super ist.
In meinen Prg verarbeite ich 1 Arrayfeld und Strings, zwischendurch werden noch Dateien kopiert.
Jetzt meine Frage, Was kann man beachten, damit das Prg schneller wird ?
Grüße
Lite
Beschäftige mich seit einigen Monaten mit PureBasic. Die Grundidee, einem Basic-Syntax in Assembler umzuwandeln finde ich genial. Deshalb hab ich mich entschlossen, diese Programmiersprache zu kaufen.
Nach den ersten Anfangsschwierigkeiten läuft es sehr gut mit den ersten Programmen.
Was mir aufgefallen ist, PureBasic ist viel zu langsam.
Gleiche operationen in einer anderen Sprache wie z.B. Autoit sind wesentlich schneller.
Nach meiner Messung teilweise um die 20-30%.
Jetzt wird Autoit nicht umgewandelt, sondern nur das Script in die .Exe gepackt, ist das schon verwunderlich.
Das enttäuscht schon sehr. Jetzt möcht ich nicht gleich Aufgeben, weil die Idee von PureBasic super ist.
In meinen Prg verarbeite ich 1 Arrayfeld und Strings, zwischendurch werden noch Dateien kopiert.
Jetzt meine Frage, Was kann man beachten, damit das Prg schneller wird ?
Grüße
Lite
Re: Geschwindigkeit
War der Debugger an? Hast du schlecht (d.h. der Performance schadend) programmiert? Hat eventuell ein Antiviren-Tool PureBasic blockiert?
Poste mal deinen Code, den du zum Vergleichen verwendet hast...
Poste mal deinen Code, den du zum Vergleichen verwendet hast...
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Re: Geschwindigkeit

Warte c4s, ich sehe ich gleich ^^
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Geschwindigkeit
Vieleicht hat lite aber einfach nur recht.
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Geschwindigkeit
Ein Programm ist immer so schnell wie man es programmiert. Man kann auch in ASM, C oder C++ arschlangsame Programme schreiben.
Vermutlich kennst du noch nicht alle Feinheiten von Purebasic und schimpfst unbegründet darüber. Deshalb wäre ein Beispielcode von dir hilfreich, der uns zeigt, wie du das Problem gelöst hast.
Vermutlich kennst du noch nicht alle Feinheiten von Purebasic und schimpfst unbegründet darüber. Deshalb wäre ein Beispielcode von dir hilfreich, der uns zeigt, wie du das Problem gelöst hast.
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Geschwindigkeit
Du solltest aber abschecken können, das PB ca. 10 - 20x schneller als AutoIt ist und das ProblemDrShrek hat geschrieben:Vieleicht hat lite aber einfach nur recht.
woanders liegt.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: Geschwindigkeit
Hallo
Zuvor ein paar Infos. Ja, der Debugger ist aus.
Es ist ein Programm, das viele Textdateien liest (ca. 200 Stück) mit ca 400-1000 Lines pro Datei.
Jede Datei wird zeilenweise gelesen, bis die Section erreicht wurde.
Ab den Zeilpunkt werden die Zeilen analysiert und weiterverarbeit.
Das Programm muss Ansi und Unicode unterstützen.Den ganzen Quellcode zu posten wäre ein wenig umfangreich.
Sind mom. 4500 Lines.
Hier ein Auszug:
Purebasic:
Autoit
Wie gesagt, wen ich das Programm in beiden Sprachen starte, ist Autoit 30 % schneller.
Bitte bei der Diskussion sachlich bleiben.
Grüße
Lite
Zuvor ein paar Infos. Ja, der Debugger ist aus.
Es ist ein Programm, das viele Textdateien liest (ca. 200 Stück) mit ca 400-1000 Lines pro Datei.
Jede Datei wird zeilenweise gelesen, bis die Section erreicht wurde.
Ab den Zeilpunkt werden die Zeilen analysiert und weiterverarbeit.
Das Programm muss Ansi und Unicode unterstützen.Den ganzen Quellcode zu posten wäre ein wenig umfangreich.
Sind mom. 4500 Lines.
Hier ein Auszug:
Purebasic:
Code: Alles auswählen
Procedure.s StringStrip(str$)
; stringstripleft (unicode)
res$=""
For x =0 To Len(str$)*2 Step 2
uni=PeekU(@str$+x)
If uni>32
res$=Mid(str$,1+(x/2))
Break
EndIf
Next
; stringstripright (unicode)
str$=""
res$= ReverseString(res$)
For x =0 To Len(res$)*2 Step 2
uni=PeekU(@res$+x)
If uni>32
str$=Mid(res$,1+(x/2))
Break
EndIf
Next
str$= ReverseString(str$)
ProcedureReturn str$
EndProcedure
Procedure _readsection(File$,Section$)
Section$=LCase(Section$)
File = OpenFile(1, File$)
If File
Format.l = ReadStringFormat(1)
If Format = #PB_Ascii Or Format = #PB_UTF8 Or Format = #PB_Unicode
length = Lof(1)
If length
*mem= AllocateMemory(length)
ReadData(1, *mem, length)
TxtFile$=PeekS(*mem,length,Format)
FreeMemory(*mem)
CloseFile(1)
Sectfound=0
lins$=""
For x=1 To CountString(TxtFile$,#LF$)+1
lin$= StringField(TxtFile$,x,#LF$)
Line$ = StringStrip(lin$) ; " " und #tab entfernen
If Left(Line$, 1) = "["
If Sectfound=1: Break: EndIf
Sectfound=0
EndIf
If Sectfound=1
If Line$="": Continue: EndIf ; leere Zeile
If Left(Line$,2) = "//": Continue: EndIf
If Left(Line$,2) = "##": Continue: EndIf
If Right(Line$,2)=",\"
lins$+RTrim(Line$,"\")
Continue
EndIf
lins$+Line$
Debug(lins$)
lins$=""
EndIf
If LCase(Line$) = "["+Section$+"]": Sectfound=1: EndIf
Next
EndIf
EndIf
EndIf
EndProcedure
Code: Alles auswählen
Func _readsection($sFileName,$sSection)
local $x
$sLine = StringSplit(FileRead($sFileName), @LF)
$sfound_sect =0
$slins="" ; temp var für line
for $x=1 to $sLine[0]
$sLine[$x]= StringStripWS($sLine[$x],3)
if $sLine[$x]="" then ContinueLoop ; leere Zeile
if stringleft($sline[$x],1)= "[" then $sfound_sect =0; vielleicht andere liste ? lesen stoppen
if $sfound_sect=1 then
$sLine[$x]= StringStripWS($sLine[$x],3)
if stringleft($sLine[$x],2) = "//" then ContinueLoop
if stringleft($sLine[$x],2) = "##" then ContinueLoop
if StringRight($sLine[$x],2)=",\" then
$sLine[$x]=StringTrimRight($sLine[$x],1)
$slins=$slins&$sLine[$x]
ContinueLoop
endif
$slins=$slins&$sLine[$x]
consolewrite($slins&crlf)
$slins=""
endif
if $sline[$x] ="["&$sSection&"]" then $sfound_sect=1
next
endfunc
Bitte bei der Diskussion sachlich bleiben.
Grüße
Lite
Re: Geschwindigkeit
- Es ist sehr schlecht, in der For-To-Schleife als End-Bedingung die Funktion CountString(TxtFile$,#LF$) zu nutzen. Der Grund ist der, dass dieser Befehl relativ langsam ist und mit jedem schleifendurchgang erneut ausgeführt wird.
Besser wäre es hier sowas zu verwenden, da du ja die Variable x nicht brauchst:So wird dieser Befehl nur einmal ausgeführt.Code: Alles auswählen
For x=CountString(TxtFile$,#LF$) To 0 Step -1
- Deine Funktion StringStrip() ist natürlich überhaupt nicht optimiert, das dehen von Strings ist langsam und unnötig.
Auch dort wieder sind Funktionen in der Schleife, die den Code verlangsammen. Hier wäre es bedeutend einfacher, den String als Pointer zu übergeben und dann in einem Unicode-Array nach betreffenden Zeichen zu suchen und am ende einen gekürzten String zurückzugeben.
Code: Alles auswählen
Structure CharacterArray
c.c[0]
EndStructure
Procedure.s StringStrip(*Char.CharacterArray)
Protected Length.i = MemoryStringLength(*Char)-1
Protected Index.i = 0
While *Char\c[Index] <= 32
Index + 1
Wend
While *Char\c[Length] <= 32
Length - 1
Wend
ProcedureReturn PeekS(@*Char\c[Index], Length-Index+1)
EndProcedure
Define String.s = #TAB$+#TAB$+" Tabs und Leerzeichen"+#TAB$+" "
MessageRequester("","'"+String+"'"+#LF$+"'"+StringStrip(@String)+"'")
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Geschwindigkeit
Jetzt noch die AutoIt Sourcen optimieren und dann geht "das Rennen" weiter.
Aktuell steht es 1:0 für AutoIt (weil kostenlos)
Aktuell steht es 1:0 für AutoIt (weil kostenlos)
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Re: Geschwindigkeit
Hallo
Danke Stargate für die Info.
Deine Vorschläge sind interessant. Hab das gestern getestet. Die Auswirkungen sind im Millisekunden bereich.
Als ich die Funktionen miteinander verglich und in eine For Next Schleife steckte, ca. 100 000 aufgerufen, hab.
Ergab sich ein Unterschied von 570 Ms zu 340 Ms für deine Funktion.
An dem kann es nicht liegen. Wen ich die Einzelnen Funktionen teste, ist PureBasic schneller.
Saß gestern 3 Stunden davor um das Problem zu finden.
Bin echt ratlos. Kann es an der Gui liegen ? Irgendwas bremst.
Benute XP Support und Unicode.
Ich weiss, ist echt schwer, darauf eine Anwort geben zu können.
Grüße
Lite
Danke Stargate für die Info.
Deine Vorschläge sind interessant. Hab das gestern getestet. Die Auswirkungen sind im Millisekunden bereich.
Als ich die Funktionen miteinander verglich und in eine For Next Schleife steckte, ca. 100 000 aufgerufen, hab.
Ergab sich ein Unterschied von 570 Ms zu 340 Ms für deine Funktion.
An dem kann es nicht liegen. Wen ich die Einzelnen Funktionen teste, ist PureBasic schneller.
Saß gestern 3 Stunden davor um das Problem zu finden.
Bin echt ratlos. Kann es an der Gui liegen ? Irgendwas bremst.
Benute XP Support und Unicode.
Ich weiss, ist echt schwer, darauf eine Anwort geben zu können.
Grüße
Lite