PureBasic 6.40 beta 3 is ready, surprise inside !

Developed or developing a new product in PureBasic? Tell the world about it.
Axolotl
Addict
Addict
Posts: 957
Joined: Wed Dec 31, 2008 3:36 pm

Re: PureBasic 6.40 beta 2 is ready, surprise inside !

Post by Axolotl »

Thanks PB-Team.
Just because it worked doesn't mean it works.
PureBasic 6.04 (x86) and <latest stable version and current alpha/beta> (x64) on Windows 11 Home. Now started with Linux (VM: Ubuntu 22.04).
Quin
Addict
Addict
Posts: 1165
Joined: Thu Mar 31, 2022 7:03 pm
Location: Colorado, United States
Contact:

Re: PureBasic 6.40 beta 2 is ready, surprise inside !

Post by Quin »

Oh hell yeah. Thanks Fred!
Fred
Administrator
Administrator
Posts: 18560
Joined: Fri May 17, 2002 4:39 pm
Location: France
Contact:

Re: PureBasic 6.40 beta 2 is ready, surprise inside !

Post 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.
User avatar
Kiffi
Addict
Addict
Posts: 1526
Joined: Tue Mar 02, 2004 1:20 pm
Location: Amphibios 9

Re: PureBasic 6.40 beta 2 is ready, surprise inside !

Post by Kiffi »

Hygge
User avatar
skywalk
Addict
Addict
Posts: 4321
Joined: Wed Dec 23, 2009 10:14 pm
Location: Boston, MA

Re: PureBasic 6.40 beta 2 is ready, surprise inside !

Post 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?
The nice thing about standards is there are so many to choose from. ~ Andrew Tanenbaum
User avatar
SPH
Enthusiast
Enthusiast
Posts: 643
Joined: Tue Jan 04, 2011 6:21 pm

Re: PureBasic 6.40 beta 2 is ready, surprise inside !

Post 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

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Portable LENOVO ideapad 110-17ACL 64 bits
Version de PB : 6.12LTS - 64 bits
User avatar
Jacobus
Enthusiast
Enthusiast
Posts: 168
Joined: Wed Nov 16, 2005 7:51 pm
Location: France
Contact:

Re: PureBasic 6.40 beta 2 is ready, surprise inside !

Post 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
PureBasicien tu es, PureBasicien tu resteras.
User avatar
ChrisR
Addict
Addict
Posts: 1595
Joined: Sun Jan 08, 2017 10:27 pm
Location: France

Re: PureBasic 6.40 beta 2 is ready, surprise inside !

Post 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()
mbierly
New User
New User
Posts: 9
Joined: Thu Jan 18, 2024 1:21 am
Location: Pennsylvania, US

Re: PureBasic 6.40 beta 2 is ready, surprise inside !

Post by mbierly »

Thanks Fred and Team for Beta 2. It is looking good so far! Looking forward to doing more work with it.
PeDe
Enthusiast
Enthusiast
Posts: 358
Joined: Sun Nov 26, 2017 3:13 pm

Re: PureBasic 6.40 beta 2 is ready, surprise inside !

Post 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
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
User avatar
Jacobus
Enthusiast
Enthusiast
Posts: 168
Joined: Wed Nov 16, 2005 7:51 pm
Location: France
Contact:

Re: PureBasic 6.40 beta 2 is ready, surprise inside !

Post 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:
Image
PureBasicien tu es, PureBasicien tu resteras.
Fred
Administrator
Administrator
Posts: 18560
Joined: Fri May 17, 2002 4:39 pm
Location: France
Contact:

Re: PureBasic 6.40 beta 2 is ready, surprise inside !

Post 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.
Fred
Administrator
Administrator
Posts: 18560
Joined: Fri May 17, 2002 4:39 pm
Location: France
Contact:

Re: PureBasic 6.40 beta 2 is ready, surprise inside !

Post 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.
User avatar
skywalk
Addict
Addict
Posts: 4321
Joined: Wed Dec 23, 2009 10:14 pm
Location: Boston, MA

Re: PureBasic 6.40 beta 2 is ready, surprise inside !

Post 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.
The nice thing about standards is there are so many to choose from. ~ Andrew Tanenbaum
Post Reply