Ich habe gerade mal einen Test gemacht und nur minimale unterschiede zwischen 5.11 und 5.21 festgestellt.
Hier ist mein wahrscheinlich erstes Tool, das ich mal mit PB geschrieben habe. Es ist nicht toll, aber zweckmäßig.
Code: Alles auswählen
Enumeration
#GUI
#Statusleiste
#Image_Buffer
#Image_Zeichenflaeche
EndEnumeration
X_aktueller_Wert.d = 0
Y_aktueller_Wert.d = 0
X_letzer_Wert.d = 0
Y_letzer_Wert.d = 0
Counter_Sin.d = 0
Counter_Messung = 0
Counter_FPS = 0
Zeit_Messung = 0
Zeit_FPS = 0
FPS = 0
aktueller_Test = 1
bearbeite_Test = 0
Test_1_Werte = 0
Test_1_FPS = 0
Test_2_Werte = 0
Test_2_FPS = 0
Test_3_Werte = 0
Test_3_FPS = 0
Test_4_Werte = 0
Test_4_FPS = 0
Zahl_1.i = 0
Zahl_2.d = 0
Zeit.i = 0
Text.s = "aaaaaaaaa"
Ergebnis_Test_1 = 0
Ergebnis_Test_2 = 0
Ergebnis_Test_3 = 0
; Konsolen-Fenster erstellen
If OpenConsole()
EnableGraphicalConsole(1)
ConsoleCursor(0)
ConsoleLocate ( 0, 0): ConsoleColor( 7, 0): Print("Performance-Test: Programmiersprache PureBasic")
ConsoleLocate ( 0, 1): ConsoleColor( 7, 0): Print("------------------------------------------------------------")
ConsoleLocate ( 0, 4): ConsoleColor( 7, 0): Print("[ ] Test 1: Ganzzahl von 0 bis 1.000.000.000 hochzählen"): ConsoleLocate (65, 4): ConsoleColor( 7, 0): Print("[ ]");
ConsoleLocate ( 0, 5): ConsoleColor( 7, 0): Print("[ ] Test 2: Gleitkommazahl von 0 bis 1.000.000 hochzählen"): ConsoleLocate (65, 5): ConsoleColor( 7, 0): Print("[ ]");
ConsoleLocate ( 0, 6): ConsoleColor( 7, 0): Print("[ ] Test 3: Stringinhalt 100.000.000 mal ändern"): ConsoleLocate (65, 6): ConsoleColor( 7, 0): Print("[ ]");
ConsoleLocate ( 0, 7): ConsoleColor( 7, 0): Print("[ ] Grafik 1: direkt in die GUI zeichnen"): ConsoleLocate (54, 7): ConsoleColor( 7, 0): Print("[ ] [ ]");
ConsoleLocate ( 0, 8): ConsoleColor( 7, 0): Print("[ ] Grafik 2: in Backbuffer zeichnen"): ConsoleLocate (54, 8): ConsoleColor( 7, 0): Print("[ ] [ ]");
ConsoleLocate ( 0, 9): ConsoleColor( 7, 0): Print("[ ] Grafik 3: in Backbuffer zeichnen (skaliert)"): ConsoleLocate (54, 9): ConsoleColor( 7, 0): Print("[ ] [ ]");
ConsoleLocate ( 0,10): ConsoleColor( 7, 0): Print("[ ] Grafik 4: in Backbuffer zeichnen (Rauschen)"): ConsoleLocate (54,10): ConsoleColor( 7, 0): Print("[ ] [ ]");
ConsoleLocate ( 0,16): ConsoleColor( 7, 0): Print("zu Test 2: die Schrittweite ist 0,001")
ConsoleLocate ( 0,17): ConsoleColor( 7, 0): Print("FPS: Darstellungen des kompletten Graphen pro Sekunde")
ConsoleLocate ( 0,18): ConsoleColor( 7, 0): Print("W/s: Werte die pro Sekunde geplottet werden")
ConsoleLocate ( 0,22): ConsoleColor( 7, 0): Print("by SBond, 09.06.2013")
; Test 1
ConsoleLocate ( 2, 4): ConsoleColor(10, 0): Print("->")
Zeit = ElapsedMilliseconds()
While (Zahl_1 <= 1000000000)
Zahl_1 + 1
Wend
Ergebnis_Test_1 = ElapsedMilliseconds() - Zeit
ConsoleLocate ( 2, 4): ConsoleColor(10, 0): Print("ok")
ConsoleLocate (74 - Len(StrU(Ergebnis_Test_1)), 4): ConsoleColor(14, 0): Print(StrU(Ergebnis_Test_1) + " ms")
; Test 2
ConsoleLocate ( 2, 5): ConsoleColor(10, 0): Print("->")
Zeit = ElapsedMilliseconds()
While (Zahl_2 <= 1000000)
Zahl_2 + 0.001
Wend
Ergebnis_Test_2 = ElapsedMilliseconds() - Zeit
ConsoleLocate ( 2, 5): ConsoleColor(10, 0): Print("ok")
ConsoleLocate (74 - Len(StrU(Ergebnis_Test_2)), 5): ConsoleColor(14, 0): Print(StrU(Ergebnis_Test_2) + " ms")
; Test 3
ConsoleLocate ( 2, 6): ConsoleColor(10, 0): Print("->")
Zeit = ElapsedMilliseconds()
For i = 0 To 10000000 Step 1
Text = "aaaaaaaaa"
Text = "bbbbbbbbb"
Text = "ccccccccc"
Text = "ddddddddd"
Text = "eeeeeeeee"
Text = "fffffffff"
Text = "ggggggggg"
Text = "hhhhhhhhh"
Text = "iiiiiiiii"
Text = "123456789"
Next
Ergebnis_Test_3 = ElapsedMilliseconds() - Zeit
ConsoleLocate ( 2, 6): ConsoleColor(10, 0): Print("ok")
ConsoleLocate (74 - Len(StrU(Ergebnis_Test_3)), 6): ConsoleColor(14, 0): Print(StrU(Ergebnis_Test_3) + " ms")
; GUI-Fenster erstellen
If (OpenWindow(#GUI, 0, 0, 800, 423, "PureBasic 2D-Drawing-Test", #PB_Window_ScreenCentered | #PB_Window_SystemMenu))
; Statusleiste erstellen
If (CreateStatusBar(#Statusleiste, WindowID(#GUI)))
AddStatusBarField(350)
AddStatusBarField(100)
AddStatusBarField(150)
AddStatusBarField(200)
StatusBarText (#Statusleiste, 0, "starte Tests...")
StatusBarProgress (#Statusleiste, 1, 0)
StatusBarText (#Statusleiste, 2, "0 Werte/sek")
StatusBarText (#Statusleiste, 3, "0 FPS")
EndIf
; die Grafikelemente erstellen
CreateImage(#Image_Buffer, 800, 400) ; Bild, auf dem gezeichnet wird
ImageGadget(#Image_Zeichenflaeche, 0, 0, 800, 400, ImageID(#Image_Buffer)) ; Gadget, auf dem das Bild angezeigt werden kann
StartDrawing(ImageOutput(#Image_Buffer)) ; startet den Zeichenvorgang
;Hintergrund leeren
Box(0, 0, 800, 400, RGB(255,255,255))
StopDrawing() ; stoppt den Zeichenvorgang
SetGadgetState(#Image_Zeichenflaeche, ImageID(#Image_Buffer)) ; zeichnet das Bild in die GUI
StartDrawing(ImageOutput(#Image_Buffer)) ; startet den Zeichenvorgang
Delay(2000)
Repeat
; Test 1: in den Frontbuffer zeichnen (10 sek)
If (aktueller_Test = 1)
; Test wird gestartet
If (bearbeite_Test = 0)
; Graph in die GUI zeichnen
StopDrawing()
SetGadgetState(#Image_Zeichenflaeche, ImageID(#Image_Buffer))
StartDrawing(ImageOutput(#Image_Buffer))
ConsoleLocate ( 2, 7): ConsoleColor(10, 0): Print("->")
;Hintergrund leeren
Box(0, 0, 800, 400, RGB(255,255,255))
StopDrawing()
StartDrawing(WindowOutput(#GUI))
StatusBarText (#Statusleiste, 0, "Test 1: direkt in die GUI zeichnen (10 sek)")
StatusBarProgress (#Statusleiste, 1, 0)
StatusBarText (#Statusleiste, 2, "0 Werte/sek")
StatusBarText (#Statusleiste, 3, "0 FPS")
bearbeite_Test = 1
Counter_FPS = 0
Counter_Messung = 0
Zeit_Messung = ElapsedMilliseconds()
Zeit_FPS = ElapsedMilliseconds()
EndIf
; FPS berechnen
If (ElapsedMilliseconds() - Zeit_FPS >= 1000)
StatusBarProgress (#Statusleiste, 1, (ElapsedMilliseconds() - Zeit_Messung) / 100)
StatusBarText (#Statusleiste, 2, StrU(Counter_FPS) + " Werte/sek")
StatusBarText (#Statusleiste, 3, StrU(Counter_FPS / 800) + " FPS")
Zeit_FPS = ElapsedMilliseconds()
Counter_FPS = 0
Else
Counter_FPS + 1
EndIf
If (ElapsedMilliseconds() - Zeit_Messung >= 10000)
StatusBarProgress (#Statusleiste, 1, (ElapsedMilliseconds() - Zeit_Messung) / 100)
StatusBarText (#Statusleiste, 2, StrU(Counter_Messung / 10) + " Werte/sek")
StatusBarText (#Statusleiste, 3, StrU(Counter_Messung / (800*10)) + " FPS")
Test_1_Werte = Counter_Messung / 10
Test_1_FPS = Counter_Messung / (800*10)
ConsoleLocate ( 2, 7): ConsoleColor(10, 0): Print("ok")
ConsoleLocate (59 - Len(StrU(Test_1_FPS)), 7): ConsoleColor(14, 0): Print(StrU(Test_1_FPS) + " FPS")
ConsoleLocate (73 - Len(StrU(Test_1_Werte)), 7): ConsoleColor(14, 0): Print(StrU(Test_1_Werte) + " W/s")
aktueller_Test = 2
bearbeite_Test = 0
Else
Counter_Messung + 1
Counter_Sin + 0.007847
Y_aktueller_Wert = 200 + Sin(Counter_Sin)*180
; Graph plotten
LineXY(X_aktueller_Wert - 1, 400 - Y_letzer_Wert, X_aktueller_Wert, 400 - Y_aktueller_Wert, $FF0000)
Y_letzer_Wert = Y_aktueller_Wert
; X-Position weiterrücken, wenn der Graph noch nicht voll ist
If X_aktueller_Wert < 800
X_aktueller_Wert + 1
Else
X_aktueller_Wert = 0
Box(0, 0, 800, 400, RGB(255,255,255))
EndIf
EndIf
ElseIf (aktueller_Test = 2)
; Test wird gestartet
If (bearbeite_Test = 0)
; Graph in die GUI zeichnen
StopDrawing()
SetGadgetState(#Image_Zeichenflaeche, ImageID(#Image_Buffer))
StartDrawing(ImageOutput(#Image_Buffer))
ConsoleLocate ( 2, 8): ConsoleColor(10, 0): Print("->")
;Hintergrund leeren
Box(0, 0, 800, 400, RGB(255,255,255))
StatusBarText (#Statusleiste, 0, "Test 2: in den Backbuffer zeichnen (10 sek)")
StatusBarProgress (#Statusleiste, 1, 0)
StatusBarText (#Statusleiste, 2, "0 Werte/sek")
StatusBarText (#Statusleiste, 3, "0 FPS")
bearbeite_Test = 1
Counter_FPS = 0
Counter_Messung = 0
Zeit_Messung = ElapsedMilliseconds()
Zeit_FPS = ElapsedMilliseconds()
EndIf
; FPS berechnen
If (ElapsedMilliseconds() - Zeit_FPS >= 1000)
StatusBarProgress (#Statusleiste, 1, (ElapsedMilliseconds() - Zeit_Messung) / 100)
StatusBarText (#Statusleiste, 2, StrU(Counter_FPS) + " Werte/sek")
StatusBarText (#Statusleiste, 3, StrU(Counter_FPS / 800) + " FPS")
Zeit_FPS = ElapsedMilliseconds()
Counter_FPS = 0
Else
Counter_FPS + 1
EndIf
If (ElapsedMilliseconds() - Zeit_Messung >= 10000)
StatusBarProgress (#Statusleiste, 1, (ElapsedMilliseconds() - Zeit_Messung) / 100)
StatusBarText (#Statusleiste, 2, StrU(Counter_Messung / 10) + " Werte/sek")
StatusBarText (#Statusleiste, 3, StrU(Counter_Messung / (800*10)) + " FPS")
Test_2_Werte = Counter_Messung / 10
Test_2_FPS = Counter_Messung / (800*10)
ConsoleLocate ( 2, 8): ConsoleColor(10, 0): Print("ok")
ConsoleLocate (59 - Len(StrU(Test_2_FPS)), 8): ConsoleColor(14, 0): Print(StrU(Test_2_FPS) + " FPS")
ConsoleLocate (73 - Len(StrU(Test_2_Werte)), 8): ConsoleColor(14, 0): Print(StrU(Test_2_Werte) + " W/s")
aktueller_Test = 3
bearbeite_Test = 0
Else
Counter_Messung + 1
Counter_Sin + 0.007847
Y_aktueller_Wert = 200 + Sin(Counter_Sin)*180
; Graph plotten
LineXY(X_aktueller_Wert - 1, 400 - Y_letzer_Wert, X_aktueller_Wert, 400 - Y_aktueller_Wert, $FF0000)
Y_letzer_Wert = Y_aktueller_Wert
; X-Position weiterrücken, wenn der Graph noch nicht voll ist
If X_aktueller_Wert < 800
X_aktueller_Wert + 1
Else
X_aktueller_Wert = 0
; Graph in die GUI zeichnen
StopDrawing()
SetGadgetState(#Image_Zeichenflaeche, ImageID(#Image_Buffer))
StartDrawing(ImageOutput(#Image_Buffer))
;Hintergrund leeren
Box(0, 0, 800, 400, RGB(255,255,255))
EndIf
EndIf
ElseIf (aktueller_Test = 3)
; Test wird gestartet
If (bearbeite_Test = 0)
; Graph in die GUI zeichnen
StopDrawing()
SetGadgetState(#Image_Zeichenflaeche, ImageID(#Image_Buffer))
StartDrawing(ImageOutput(#Image_Buffer))
ConsoleLocate ( 2, 9): ConsoleColor(10, 0): Print("->")
;Hintergrund leeren
Box(0, 0, 800, 400, RGB(255,255,255))
StatusBarText (#Statusleiste, 0, "Test 3: in den Backbuffer zeichnen; skaliert mit Faktor 10")
StatusBarProgress (#Statusleiste, 1, 0)
StatusBarText (#Statusleiste, 2, "0 Werte/sek")
StatusBarText (#Statusleiste, 3, "0 FPS")
bearbeite_Test = 1
Counter_FPS = 0
Counter_Messung = 0
Zeit_Messung = ElapsedMilliseconds()
Zeit_FPS = ElapsedMilliseconds()
EndIf
; FPS berechnen
If (ElapsedMilliseconds() - Zeit_FPS >= 1000)
StatusBarProgress (#Statusleiste, 1, (ElapsedMilliseconds() - Zeit_Messung) / 100)
StatusBarText (#Statusleiste, 2, StrU(Counter_FPS) + " Werte/sek")
StatusBarText (#Statusleiste, 3, StrU(Counter_FPS / (800*10)) + " FPS")
Zeit_FPS = ElapsedMilliseconds()
Counter_FPS = 0
Else
Counter_FPS + 1
EndIf
If (ElapsedMilliseconds() - Zeit_Messung >= 10000)
StatusBarProgress (#Statusleiste, 1, (ElapsedMilliseconds() - Zeit_Messung) / 100)
StatusBarText (#Statusleiste, 2, StrU(Counter_Messung / 10) + " Werte/sek")
StatusBarText (#Statusleiste, 3, StrU(Counter_Messung / (800*10*10)) + " FPS")
Test_3_Werte = Counter_Messung / 10
Test_3_FPS = Counter_Messung / (800*10*10)
ConsoleLocate ( 2, 9): ConsoleColor(10, 0): Print("ok")
ConsoleLocate (59 - Len(StrU(Test_3_FPS)), 9): ConsoleColor(14, 0): Print(StrU(Test_3_FPS) + " FPS")
ConsoleLocate (73 - Len(StrU(Test_3_Werte)), 9): ConsoleColor(14, 0): Print(StrU(Test_3_Werte) + " W/s")
aktueller_Test = 4
bearbeite_Test = 0
Else
Counter_Messung + 1
Counter_Sin + 0.007847
Y_aktueller_Wert = 200 + Sin(Counter_Sin)*180
; Graph plotten
LineXY(X_aktueller_Wert - 1, 400 - Y_letzer_Wert, X_aktueller_Wert, 400 - Y_aktueller_Wert, $FF0000)
Y_letzer_Wert = Y_aktueller_Wert
; X-Position weiterrücken, wenn der Graph noch nicht voll ist
If X_aktueller_Wert < 800
X_aktueller_Wert + 0.1
Else
X_aktueller_Wert = 0
; Graph in die GUI zeichnen
StopDrawing()
SetGadgetState(#Image_Zeichenflaeche, ImageID(#Image_Buffer))
StartDrawing(ImageOutput(#Image_Buffer))
;Hintergrund leeren
Box(0, 0, 800, 400, RGB(255,255,255))
EndIf
EndIf
ElseIf (aktueller_Test = 4)
; Test wird gestartet
If (bearbeite_Test = 0)
; Graph in die GUI zeichnen
StopDrawing()
SetGadgetState(#Image_Zeichenflaeche, ImageID(#Image_Buffer))
StartDrawing(ImageOutput(#Image_Buffer))
ConsoleLocate ( 2,10): ConsoleColor(10, 0): Print("->")
;Hintergrund leeren
Box(0, 0, 800, 400, RGB(255,255,255))
StatusBarText (#Statusleiste, 0, "Test 4: mit Backbuffer, Sinus mit Rauschen")
StatusBarProgress (#Statusleiste, 1, 0)
StatusBarText (#Statusleiste, 2, "0 Werte/sek")
StatusBarText (#Statusleiste, 3, "0 FPS")
bearbeite_Test = 1
Counter_FPS = 0
Counter_Messung = 0
Zeit_Messung = ElapsedMilliseconds()
Zeit_FPS = ElapsedMilliseconds()
EndIf
; FPS berechnen
If (ElapsedMilliseconds() - Zeit_FPS >= 1000)
StatusBarProgress (#Statusleiste, 1, (ElapsedMilliseconds() - Zeit_Messung) / 100)
StatusBarText (#Statusleiste, 2, StrU(Counter_FPS) + " Werte/sek")
StatusBarText (#Statusleiste, 3, StrU(Counter_FPS / 800) + " FPS")
Zeit_FPS = ElapsedMilliseconds()
Counter_FPS = 0
Else
Counter_FPS + 1
EndIf
If (ElapsedMilliseconds() - Zeit_Messung >= 10000)
StatusBarProgress (#Statusleiste, 1, (ElapsedMilliseconds() - Zeit_Messung) / 100)
StatusBarText (#Statusleiste, 2, StrU(Counter_Messung / 10) + " Werte/sek")
StatusBarText (#Statusleiste, 3, StrU(Counter_Messung / (800*10)) + " FPS")
Test_4_Werte = Counter_Messung / 10
Test_4_FPS = Counter_Messung / (800*10)
ConsoleLocate ( 2,10): ConsoleColor(10, 0): Print("ok")
ConsoleLocate (59 - Len(StrU(Test_4_FPS)),10): ConsoleColor(14, 0): Print(StrU(Test_4_FPS) + " FPS")
ConsoleLocate (73 - Len(StrU(Test_4_Werte)),10): ConsoleColor(14, 0): Print(StrU(Test_4_Werte) + " W/s")
aktueller_Test = 0
bearbeite_Test = 0
Else
Counter_Messung + 1
Counter_Sin + 0.007847
Y_aktueller_Wert = 200 + Sin(Counter_Sin)*10*Random(19,5)
; Graph plotten
LineXY(X_aktueller_Wert - 1, 400 - Y_letzer_Wert, X_aktueller_Wert, 400 - Y_aktueller_Wert, RGB(Random(255), Random(255), Random(255)))
Y_letzer_Wert = Y_aktueller_Wert
; X-Position weiterrücken, wenn der Graph noch nicht voll ist
If X_aktueller_Wert < 800
X_aktueller_Wert + 1
Else
X_aktueller_Wert = 0
; Graph in die GUI zeichnen
StopDrawing()
SetGadgetState(#Image_Zeichenflaeche, ImageID(#Image_Buffer))
StartDrawing(ImageOutput(#Image_Buffer))
;Hintergrund leeren
Box(0, 0, 800, 400, RGB(Random(255), Random(255), Random(255)))
EndIf
EndIf
EndIf
If (aktueller_Test = 0)
CloseWindow(#GUI)
Break
EndIf
; Programm beenden
Select WindowEvent()
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
EndIf
ConsoleLocate ( 9, 12): ConsoleColor(10, 0): Print("Abgeschlossen! ---Beenden mit Return-Taste---");
ConsoleColor ( 0, 0): Input()
EndIf