Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Nitroxis
Anmeldungsdatum: 27.02.2008 Beiträge: 300 Wohnort: Irgendwo...
|
Verfasst am: 18.04.2009, 15:08 Titel: Warum dauert CLS länger als Line? |
|
|
Hallo.
Ich habe ein kleinen Test gemacht und habe herausgefunden das CLS länger dauert als LINE, obwohl beide das selbe machen.
Hier mein Test: Code: | Dim CLSTimer As Double
Dim LineTimer As Double
ScreenRes 640, 480, 32
CLSTimer = Timer
For i As Integer = 1 To 1000
Cls()
Next
CLSTimer = Timer - CLSTimer
LineTimer = Timer
For i As Integer = 1 To 1000
Line(0, 0)-(639, 479), RGB(0, 0, 0), BF
Next
LineTimer = Timer - LineTimer
Print Using "CLS dauert: ###.### Sekunden"; CLSTimer
Print Using "Line dauert: ###.### Sekunden"; LineTimer
GetKey() | Macht CLS noch was anderes als LINE? |
|
Nach oben |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
Verfasst am: 18.04.2009, 15:41 Titel: |
|
|
Also bei mir dauert CLS 0.146 Sekunden
und LINE 0.155 Sekunden lt. deinem obigen Programm.
D.h. bei mir ist CLS schneller (wenn auch nur gering).
Das Testergebnis ist übrigens relativ stabil und ergibt bei jedem Versuch ungefähr das selbe.
CLS macht meines Wissens nichts anderes, als den Bildschirm (bzw. Viewport) zu löschen. _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 18.04.2009, 15:58 Titel: |
|
|
CLS: 0.76
LINE: 0.65
wobei CLS eher mal einen Sprung nach oben gemacht hat, kann aber Zufall sein.
CLS löscht den Bildschirm, LINE übermalt ihn ... ob das bei FreeBASIC im Grafikscreen einen Unterschied macht, weiß ich nicht; in anderen Dialekten kenne ich durchaus das Verhalten, dass beim Übermalen einer PRINT-Ausgabe diese noch weiter bestehen blieb, nur eben nicht mehr zu sehen war. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Nitroxis
Anmeldungsdatum: 27.02.2008 Beiträge: 300 Wohnort: Irgendwo...
|
Verfasst am: 18.04.2009, 16:14 Titel: |
|
|
Bei mir dauert CLS 2.4 Sek. und LINE 1.9 Sek.
Irgendwie komisch... |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 18.04.2009, 16:48 Titel: |
|
|
Ich würde mal behaupten, dass CLS alle D3D-Objekte löscht, während Line nur übermalt, sodass bei CLS wohl geringfügig Speicher gespart werden dürfte... |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 18.04.2009, 17:37 Titel: |
|
|
Code: | Sub cls_asm (a As UInteger)
Dim s As UInteger=Cast(UInteger,ScreenPtr)
Asm
mov ecx, [a]
Shr ecx, 2
mov eax, [s]
xorps xmm1,xmm1
nochmal:
movntps [eax],xmm1
add eax,16
dec ecx
jnz nochmal
End Asm
End Sub
Dim CLSTimer As Double
Dim LineTimer As Double
ScreenRes 640, 480, 32
CLSTimer = Timer
For i As Integer = 1 To 1000
Cls
Next
CLSTimer = Timer - CLSTimer
LineTimer = Timer
For i As Integer = 1 To 1000
Line(0, 0)-(639, 479), -1, BF
Next
LineTimer = Timer - LineTimer
ScreenLock
Dim As Double asm_sseTimer = Timer
For i As Integer = 1 To 1000
cls_asm(640*480)
Next
asm_sseTimer = Timer - asm_sseTimer
ScreenUnlock
Print Using "CLS dauert: ###.### Sekunden"; CLSTimer
Print Using "LINE dauert: ###.### Sekunden"; LineTimer
Print Using "cls_asm dauert: ###.### Sekunden"; asm_sseTimer
GetKey |  _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 18.04.2009, 18:26 Titel: |
|
|
Hmm, die ASM-Version hängt sich bei mir (Linux) scheinbar auf.  _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 18.04.2009, 19:12 Titel: |
|
|
Hmm..
ich dachte ich hätte die älteste, langsamste CPU
meine CPU hat Folgendes geschrieben: | CLS dauert: 3,658 Sekunden
LINE dauert: 3,525 Sekunden
clsasm dauert: 0,755 Sekunden
| aber die kann schon SSE  _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 18.04.2009, 20:06 Titel: |
|
|
Vielleicht liegt's am Betriebssystem? Der Prozessor sollte sehr neu sein.
Ich werde es mal unter Windows probieren.
edit: Unter Windows funktioniert es.
CLS 0.784
LINE 0.735
ASM 0.467 _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
frebas
Anmeldungsdatum: 20.06.2008 Beiträge: 245
|
Verfasst am: 08.10.2009, 17:08 Titel: |
|
|
Ich hab die Antwort auf den Threadtitel falls es jemanden interessiert!
Beim FB cls wird die position des cursers für die print befehle wieder auf null gesetzt.
Wenn man nicht möchte dass die position dieses curser wieder auf null gesetzt wird kann man auch "cls 1" benutzen. |
|
Nach oben |
|
 |
isiprimax
Anmeldungsdatum: 02.01.2009 Beiträge: 77
|
Verfasst am: 09.10.2009, 21:33 Titel: |
|
|
Habs hier auf meinem Laptop getestet.
HP Pavilion DV7-1262EG (Vista 32)
Ergebnis -> (Habs 10 mal gestartet, nur geringe Schwankungen)
CLS_dauert : 0.171 Sek.
LINE_dauert : 0.137 Sek.
clsasm dauert : 0.244 Sek.
Auf meinem Desktop PC (Intel E4700, XP) ist es das selbe Ergebnis (mit geringen Schwankungen). |
|
Nach oben |
|
 |
|