Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Warum dauert CLS länger als Line?

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Nitroxis



Anmeldungsdatum: 27.02.2008
Beiträge: 300
Wohnort: Irgendwo...

BeitragVerfasst am: 18.04.2009, 15:08    Titel: Warum dauert CLS länger als Line? Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 18.04.2009, 15:41    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 18.04.2009, 15:58    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Nitroxis



Anmeldungsdatum: 27.02.2008
Beiträge: 300
Wohnort: Irgendwo...

BeitragVerfasst am: 18.04.2009, 16:14    Titel: Antworten mit Zitat

Bei mir dauert CLS 2.4 Sek. und LINE 1.9 Sek.
Irgendwie komisch...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 18.04.2009, 16:48    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 18.04.2009, 17:37    Titel: Antworten mit Zitat

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
grinsen
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 18.04.2009, 18:26    Titel: Antworten mit Zitat

Hmm, die ASM-Version hängt sich bei mir (Linux) scheinbar auf. neutral
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 18.04.2009, 19:12    Titel: Antworten mit Zitat

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 happy
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 18.04.2009, 20:06    Titel: Antworten mit Zitat

Vielleicht liegt's am Betriebssystem? Der Prozessor sollte sehr neu sein. happy
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
Benutzer-Profile anzeigen Private Nachricht senden
frebas



Anmeldungsdatum: 20.06.2008
Beiträge: 245

BeitragVerfasst am: 08.10.2009, 17:08    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
isiprimax



Anmeldungsdatum: 02.01.2009
Beiträge: 77

BeitragVerfasst am: 09.10.2009, 21:33    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz