Page 11 of 13
Re: PureBasic 6.40 beta 2 is ready, surprise inside !
Posted: Wed Mar 11, 2026 3:48 pm
by Fred
2026-03-11: beta 2 is out ! Please test is as much as you can, we have ironed out some more bugs and should be better now. The procedure string parameter optimization has been disabled as it doesn't always work as expected.
Bugfixes for this version:This list was created automatically. All updated bug threads from the date of the last final version have been determined.
Re: PureBasic 6.40 beta 2 is ready, surprise inside !
Posted: Wed Mar 11, 2026 4:03 pm
by Axolotl
Thanks PB-Team.
Re: PureBasic 6.40 beta 2 is ready, surprise inside !
Posted: Wed Mar 11, 2026 4:16 pm
by Quin
Oh hell yeah. Thanks Fred!
Re: PureBasic 6.40 beta 2 is ready, surprise inside !
Posted: Wed Mar 11, 2026 5:28 pm
by Fred
Here are some very basic perf tests to toy with:
Code: Select all
OpenConsole()
Start = ElapsedMilliseconds()
For l = 0 To 100000
b$ = "Hello"
b$ = "Hello"
b$ = "Hello"
b$ = "Hello"
b$ = "Hello"
b$ = "Hello"
b$ = "Hello"
b$ = "Hello"
b$ = "Hello"
b$ = "Hello"
b$ = "Hello"
b$ = "Hello"
b$ = "Hello"
b$ = "Hello"
b$ = "Hello"
b$ = "Hello"
b$ = "Hello"
b$ = "Hello"
b$ = "Hello"
b$ = "Hello"
Next
; PrintN(b$)
PrintN("Litteral assign: "+Str(ElapsedMilliseconds() - Start) + " ms")
Start = ElapsedMilliseconds()
For l = 0 To 100000
b$ = "Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello "
b$ = "Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello "
b$ = "Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello "
b$ = "Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello "
b$ = "Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello "
b$ = "Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello "
b$ = "Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello "
b$ = "Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello "
b$ = "Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello "
b$ = "Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello "
b$ = "Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello "
b$ = "Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello "
b$ = "Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello "
b$ = "Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello "
b$ = "Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello "
b$ = "Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello "
b$ = "Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello "
b$ = "Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello "
b$ = "Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello "
Next
; PrintN(b$)
PrintN("Big litteral assign: "+Str(ElapsedMilliseconds() - Start) + " ms")
Start = ElapsedMilliseconds()
For l = 0 To 100000
b$ = UCase("Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello ")
b$ = UCase("Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello ")
b$ = UCase("Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello ")
b$ = UCase("Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello ")
b$ = UCase("Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello ")
b$ = UCase("Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello ")
b$ = UCase("Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello ")
b$ = UCase("Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello ")
b$ = UCase("Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello ")
b$ = UCase("Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello ")
b$ = UCase("Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello ")
b$ = UCase("Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello ")
b$ = UCase("Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello ")
b$ = UCase("Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello ")
b$ = UCase("Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello ")
b$ = UCase("Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello ")
b$ = UCase("Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello ")
Next
; PrintN(b$)
PrintN("Ucase litteral assign: "+Str(ElapsedMilliseconds() - Start) + " ms")
Start = ElapsedMilliseconds()
a$ = "World World World World World World World World World World World World World World World World World World World World World World World "
For l = 0 To 10000
b$ = UCase(a$ + a$)
b$ = UCase(a$ + a$)
b$ = UCase(a$ + a$)
b$ = UCase(a$ + a$)
b$ = UCase(a$ + a$)
b$ = UCase(a$ + a$)
b$ = UCase(a$ + a$)
b$ = UCase(a$ + a$)
b$ = UCase(a$ + a$)
b$ = UCase(a$ + a$)
b$ = UCase(a$ + a$)
b$ = UCase(a$ + a$)
b$ = UCase(a$ + a$)
b$ = UCase(a$ + a$)
b$ = UCase(a$ + a$)
b$ = UCase(a$ + a$)
b$ = UCase(a$ + a$)
Next
; PrintN(b$)
PrintN("Ucase assign: "+Str(ElapsedMilliseconds() - Start) + " ms")
Start = ElapsedMilliseconds()
a$ = "World World World World World World World World World World World World World World World World World World World World World World World "
For l = 0 To 10000
b$ = UCase(a$ + a$ + a$ + "Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello ")
b$ = UCase(a$ + a$ + a$ + "Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello ")
b$ = UCase(a$ + a$ + a$ + "Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello ")
b$ = UCase(a$ + a$ + a$ + "Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello ")
b$ = UCase(a$ + a$ + a$ + "Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello ")
b$ = UCase(a$ + a$ + a$ + "Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello ")
b$ = UCase(a$ + a$ + a$ + "Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello ")
b$ = UCase(a$ + a$ + a$ + "Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello ")
b$ = UCase(a$ + a$ + a$ + "Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello ")
b$ = UCase(a$ + a$ + a$ + "Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello ")
b$ = UCase(a$ + a$ + a$ + "Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello ")
b$ = UCase(a$ + a$ + a$ + "Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello ")
b$ = UCase(a$ + a$ + a$ + "Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello ")
b$ = UCase(a$ + a$ + a$ + "Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello ")
b$ = UCase(a$ + a$ + a$ + "Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello ")
b$ = UCase(a$ + a$ + a$ + "Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello ")
b$ = UCase(a$ + a$ + a$ + "Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello ")
b$ = UCase(a$ + a$ + a$ + "Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello ")
Next
; PrintN(b$)
PrintN("Ucase complex assign: "+Str(ElapsedMilliseconds() - Start) + " ms")
Start = ElapsedMilliseconds()
For l = 0 To 100000
b$ = Str(1550125)
b$ = Str(1550125)
b$ = Str(1550125)
b$ = Str(1550125)
b$ = Str(1550125)
b$ = Str(1550125)
b$ = Str(1550125)
b$ = Str(1550125)
b$ = Str(1550125)
b$ = Str(1550125)
b$ = Str(1550125)
b$ = Str(1550125)
b$ = Str(1550125)
b$ = Str(1550125)
b$ = Str(1550125)
Next
; PrintN(b$)
PrintN("Str assign: "+Str(ElapsedMilliseconds() - Start) + " ms")
Start = ElapsedMilliseconds()
For l = 0 To 100000
b$ = Str(1550125)+" -" +Str(45421545)+ " - " +Str(66666666)
b$ = Str(1550125)+" -" +Str(45421545)+ " - " +Str(66666666)
b$ = Str(1550125)+" -" +Str(45421545)+ " - " +Str(66666666)
b$ = Str(1550125)+" -" +Str(45421545)+ " - " +Str(66666666)
b$ = Str(1550125)+" -" +Str(45421545)+ " - " +Str(66666666)
b$ = Str(1550125)+" -" +Str(45421545)+ " - " +Str(66666666)
b$ = Str(1550125)+" -" +Str(45421545)+ " - " +Str(66666666)
b$ = Str(1550125)+" -" +Str(45421545)+ " - " +Str(66666666)
b$ = Str(1550125)+" -" +Str(45421545)+ " - " +Str(66666666)
b$ = Str(1550125)+" -" +Str(45421545)+ " - " +Str(66666666)
b$ = Str(1550125)+" -" +Str(45421545)+ " - " +Str(66666666)
b$ = Str(1550125)+" -" +Str(45421545)+ " - " +Str(66666666)
b$ = Str(1550125)+" -" +Str(45421545)+ " - " +Str(66666666)
Next
; PrintN(b$)
PrintN("Str concat: "+Str(ElapsedMilliseconds() - Start) + " ms")
Start = ElapsedMilliseconds()
a$ = "World WorldWorld WorldWorld WorldWorld WorldWorld WorldWorld WorldWorld WorldWorld WorldWorld WorldWorld WorldWorld WorldWorld WorldWorld WorldWorld WorldWorld WorldWorld WorldWorld WorldWorld WorldWorld WorldWorld WorldWorld WorldWorld WorldWorld WorldWorld World"
For l = 0 To 1000
b$ = b$ + a$
Next
PrintN("Final length = " + Str(Len(b$)))
PrintN("Large concat: "+Str(ElapsedMilliseconds() - Start) + " ms")
Start = ElapsedMilliseconds()
For l = 0 To 10000
If UCase("Hello my friend") = LCase("Hello my friend")+UCase("HELLOOOOOOOO") : EndIf
If UCase("Hello my friend") = LCase("Hello my friend")+UCase("HELLOOOOOOOO") : EndIf
If UCase("Hello my friend") = LCase("Hello my friend")+UCase("HELLOOOOOOOO") : EndIf
If UCase("Hello my friend") = LCase("Hello my friend")+UCase("HELLOOOOOOOO") : EndIf
If UCase("Hello my friend") = LCase("Hello my friend")+UCase("HELLOOOOOOOO") : EndIf
If UCase("Hello my friend") = LCase("Hello my friend")+UCase("HELLOOOOOOOO") : EndIf
If UCase("Hello my friend") = LCase("Hello my friend")+UCase("HELLOOOOOOOO") : EndIf
If UCase("Hello my friend") = LCase("Hello my friend")+UCase("HELLOOOOOOOO") : EndIf
If UCase("Hello my friend") = LCase("Hello my friend")+UCase("HELLOOOOOOOO") : EndIf
If UCase("Hello my friend") = LCase("Hello my friend")+UCase("HELLOOOOOOOO") : EndIf
If UCase("Hello my friend") = LCase("Hello my friend")+UCase("HELLOOOOOOOO") : EndIf
If UCase("Hello my friend") = LCase("Hello my friend")+UCase("HELLOOOOOOOO") : EndIf
If UCase("Hello my friend") = LCase("Hello my friend")+UCase("HELLOOOOOOOO") : EndIf
If UCase("Hello my friend") = LCase("Hello my friend")+UCase("HELLOOOOOOOO") : EndIf
If UCase("Hello my friend") = LCase("Hello my friend")+UCase("HELLOOOOOOOO") : EndIf
If UCase("Hello my friend") = LCase("Hello my friend")+UCase("HELLOOOOOOOO") : EndIf
If UCase("Hello my friend") = LCase("Hello my friend")+UCase("HELLOOOOOOOO") : EndIf
If UCase("Hello my friend") = LCase("Hello my friend")+UCase("HELLOOOOOOOO") : EndIf
If UCase("Hello my friend") = LCase("Hello my friend")+UCase("HELLOOOOOOOO") : EndIf
If UCase("Hello my friend") = LCase("Hello my friend")+UCase("HELLOOOOOOOO") : EndIf
If UCase("Hello my friend") = LCase("Hello my friend")+UCase("HELLOOOOOOOO") : EndIf
If UCase("Hello my friend") = LCase("Hello my friend")+UCase("HELLOOOOOOOO") : EndIf
Next
PrintN("Comparison dynamic buffer: "+Str(ElapsedMilliseconds() - Start) + " ms")
Procedure.s StringParameterProcedure(a$, b$)
ProcedureReturn UCase(a$) + LCase(b$)
EndProcedure
Start = ElapsedMilliseconds()
For l = 0 To 100000
a$ = StringParameterProcedure("Hello", "World")
a$ = StringParameterProcedure("Hello", "World")
a$ = StringParameterProcedure("Hello", "World")
a$ = StringParameterProcedure("Hello", "World")
a$ = StringParameterProcedure("Hello", "World")
a$ = StringParameterProcedure("Hello", "World")
a$ = StringParameterProcedure("Hello", "World")
a$ = StringParameterProcedure("Hello", "World")
a$ = StringParameterProcedure("Hello", "World")
a$ = StringParameterProcedure("Hello", "World")
a$ = StringParameterProcedure("Hello", "World")
a$ = StringParameterProcedure("Hello", "World")
a$ = StringParameterProcedure("Hello", "World")
Next
PrintN("Procedure with strings call: "+Str(ElapsedMilliseconds() - Start) + " ms")
PrintN("Finished")
; MessageRequester("", "")
Input()
End
And the results on my computer:
6.30:
Code: Select all
Litteral assign: 165 ms
Big litteral assign: 692 ms
Ucase litteral assign: 2070 ms
Ucase assign: 318 ms
Ucase complex assign: 725 ms
Str assign: 218 ms
Str concat: 500 ms
Final length = 264292
Large concat: 242 ms
Comparison dynamic buffer: 115 ms
Procedure with strings call: 690 ms
Finished
6.40:
Code: Select all
Litteral assign: 80 ms
Big litteral assign: 103 ms
Ucase litteral assign: 1186 ms
Ucase assign: 143 ms
Ucase complex assign: 360 ms
Str assign: 81 ms
Str concat: 482 ms
Final length = 264292
Large concat: 25 ms
Comparison dynamic buffer: 96 ms
Procedure with strings call: 319 ms
Finished
It's always faster for these tests, sometimes up to 10x. Of course slower cases can probably be found as well, but standard ops should be much faster.
Re: PureBasic 6.40 beta 2 is ready, surprise inside !
Posted: Wed Mar 11, 2026 5:52 pm
by Kiffi
Re: PureBasic 6.40 beta 2 is ready, surprise inside !
Posted: Wed Mar 11, 2026 6:54 pm
by skywalk
A picture with normalized values even better!
It is weird that some use cases are only 2x better?
Does that mean it was already optimized or there is still room for improvement in 6.40?
Re: PureBasic 6.40 beta 2 is ready, surprise inside !
Posted: Wed Mar 11, 2026 6:58 pm
by SPH
With my laptop which is 3 years old max :
6.30b3
Litteral assign: 209 ms
Big litteral assign: 497 ms
Ucase litteral assign: 1328 ms
Ucase assign: 162 ms
Ucase complex assign: 341 ms
Str assign: 149 ms
Str concat: 215 ms
Final length = 264292
Large concat: 113 ms
Comparison dynamic buffer: 74 ms
Procedure with strings call: 582 ms
Finished
6.40a1
Litteral assign: 66 ms
Big litteral assign: 81 ms
Ucase litteral assign: 728 ms
Ucase assign: 107 ms
Ucase complex assign: 217 ms
Str assign: 61 ms
Str concat: 316 ms
Final length = 264292
Large concat: 10 ms
Comparison dynamic buffer: 66 ms
Procedure with strings call: 253 ms
Finished
Re: PureBasic 6.40 beta 2 is ready, surprise inside !
Posted: Wed Mar 11, 2026 7:44 pm
by Jacobus
This optimization is impressive!
IT13, 13th Gen Intel(R) Core(TM) i9-13900H (2.60 GHz)
Système d’exploitation 64 bits, processeur x64, RAM 32,0 GB
Windows 11 Professionnel 25H2, PB 6.40 B2
Litteral assign: 52 ms
Big litteral assign: 59 ms
Ucase litteral assign: 334 ms
Ucase assign: 40 ms
Ucase complex assign: 89 ms
Str assign: 51 ms
Str concat: 141 ms
Final length = 264292
Large concat: 7 ms
Comparison dynamic buffer: 42 ms
Procedure with strings call: 238 ms
Re: PureBasic 6.40 beta 2 is ready, surprise inside !
Posted: Thu Mar 12, 2026 2:14 am
by ChrisR
Thanks for the beta2, everything looks good so far with my app
Fred wrote: Wed Mar 11, 2026 5:28 pm
It's always faster for these tests, sometimes up to 10x. Of course slower cases can probably be found as well, but standard ops should be much faster.
It's indeed much faster everywhere, up to 15 times faster here for "Large concat" but just a bit slower here for "Str concat: 124 ms vs 182 ms"
ps: #PB_String_InPlace is still present in the help for ReplaceString()
Re: PureBasic 6.40 beta 2 is ready, surprise inside !
Posted: Thu Mar 12, 2026 5:57 am
by mbierly
Thanks Fred and Team for Beta 2. It is looking good so far! Looking forward to doing more work with it.
Re: PureBasic 6.40 beta 2 is ready, surprise inside !
Posted: Thu Mar 12, 2026 6:10 am
by PeDe
Raspberry Pi 500, Raspberry Pi OS, arm64 (Debian 13)
With the RaspPi, it's a little different:
Code: Select all
v6.30 v6.40b2 v6.40b3
Litteral assign: 35 ms 77 ms - 49 ms -
Big litteral assign: 327 ms 129 ms + 79 ms +
Ucase litteral assign: 3270 ms 3029 ms + 2944 ms +
Ucase assign: 440 ms 377 ms + 370 ms +
Ucase complex assign: 1065 ms 908 ms + 910 ms +
Str assign: 75 ms 82 ms - 46 ms +
Str concat: 207 ms 411 ms - 272 ms -
Final length = 264292
Large concat: 144 ms 33 ms + 15 ms +
Comparison dynamic buffer: 108 ms 123 ms - 105 ms +
Procedure with strings call: 320 ms 388 ms - 222 ms +
Finished
Peter
Re: PureBasic 6.40 beta 2 is ready, surprise inside !
Posted: Thu Mar 12, 2026 9:20 am
by Jacobus
I repeated the test on both 64-bit versions to highlight the results. Two values are better with PB 6.30.
Result in one image:

Re: PureBasic 6.40 beta 2 is ready, surprise inside !
Posted: Thu Mar 12, 2026 9:29 am
by Fred
PeDe wrote: Thu Mar 12, 2026 6:10 am
Raspberry Pi 500, Raspberry Pi OS, arm64 (Debian 13)
With the RaspPi, it's a little different:
Code: Select all
v6.30 v6.40b2
Litteral assign: 35 ms 77 ms -
Big litteral assign: 327 ms 129 ms +
Ucase litteral assign: 3270 ms 3029 ms +
Ucase assign: 440 ms 377 ms +
Ucase complex assign: 1065 ms 908 ms +
Str assign: 75 ms 82 ms -
Str concat: 207 ms 411 ms -
Final length = 264292
Large concat: 144 ms 33 ms +
Comparison dynamic buffer: 108 ms 123 ms -
Procedure with strings call: 320 ms 388 ms -
Finished
Peter
Mimalloc is disabled on RaspPI for now, that's probably why it's similar for alloc stuff. I will try to activate it but I got some build issue with mimalloc itself so stay tuned.
Re: PureBasic 6.40 beta 2 is ready, surprise inside !
Posted: Thu Mar 12, 2026 9:32 am
by Fred
skywalk wrote: Wed Mar 11, 2026 6:54 pm
A picture with normalized values even better!
It is weird that some use cases are only 2x better?
Does that mean it was already optimized or there is still room for improvement in 6.40?
Well, 2x better is huge, no ? The old system wasn't that bad perfomance wise, but it has some limitation and some very hacky implementation which made the maintenance hard. Also when the Thread mode was enabled (which is for most apps nowaday) there was an extra performance hit. Now, the perfs are the same in thread and non-threaded mode.
The benchmark doesn't include string functions, but some are much faster, like Len(), Right(), RSet(), Mid(), etc. Basically having an instant length info is very useful for a lot of commands.
Re: PureBasic 6.40 beta 2 is ready, surprise inside !
Posted: Thu Mar 12, 2026 12:50 pm
by skywalk
Ok, I will redo my split() and join() speed tests, but many years ago it was 600x faster with comparememorystring() vs native PB string calls.
Thanks for clarifying where the new 2x comes from.