Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
nixsager
Anmeldungsdatum: 16.08.2007 Beiträge: 70
|
Verfasst am: 03.05.2011, 16:11 Titel: Was ist reaktionsschneller SELCET CASE oder IF? |
|
|
Was ist reaktionsschneller SELCET CASE oder IF? |
|
Nach oben |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 03.05.2011, 16:25 Titel: |
|
|
Die Antwort ist FreeBASIC ist schneller.
Wenn du dir unter QB Gedanken um Select Case und If machst, dann wär das ein Zeichen um zu wechseln.
Allgemein kann man sagen, dass Select Case schneller sein sollte als lange If-Anweisungen mit vielen ElseIf. Der Code wird intern über Sprungtabellen geregelt und deswegen sollte es schneller sein. Bei kurzen Anweisungen dürfte es sich nicht viel nehmen.
Unter FreeBASIC hättest du noch die Möglichkeit Select Case mit Konstanten durchlaufen zu lassen, was hier nochmals optimiert wurde. |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 03.05.2011, 16:28 Titel: |
|
|
Ich glaube nicht, dass man allgemein sagen kann, dass eines auf jeden Fall immer schneller sein muss, aber bei SELECT CASE findet die Auswertung auf jeden Fall nur einmal statt. Mit
Code: | SELECT CASE komplizierteAuswertung()
CASE 1 : ...
CASE 2 : ...
...
END SELECT |
bist du also sicher schneller als mit
Code: | IF komplizierteAuswertung() = 1 THEN
...
ELSEIF komplizierteAuswertung() = 2 THEN
...
END IF |
Das mit den Konstanten hat MOD ja schon gesagt _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
nixsager
Anmeldungsdatum: 16.08.2007 Beiträge: 70
|
Verfasst am: 03.05.2011, 17:01 Titel: |
|
|
Naja, auf meinem Rechner fällt mir das nicht so auf.
Aber da das Programm auch auf einem XT laufen soll, ist es wohl besser die Rotine zu ersetzen.
Zu FB.
VBDOS reicht mir für mein ansprüche noch.
Also werde ich erstmal nicht wechsel. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 03.05.2011, 17:46 Titel: |
|
|
Ein Programm, das auf einem XT schnell laufen soll, würde ich in allererster Linie mal nicht mit Q/F/VBASIC schreiben. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
SpionAtom
Anmeldungsdatum: 10.01.2005 Beiträge: 395
|
Verfasst am: 04.05.2011, 18:22 Titel: |
|
|
Wenn du wirklich wissen willst, was schneller ist, lass die jeweiligen Kontrollstrukturen in einer Schleife jeweils 10000 mal laufen, und stopp die Zeit, die sie brauchen. Dann weißte bescheid  _________________ Inzwischen gehöre ich auch zu den BlitzBasicern. Also verzeiht mir, wenn mir mal ein LOCATE 100, 100 oder dergleichen rausrutscht. |
|
Nach oben |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 04.05.2011, 18:25 Titel: |
|
|
Das wär vermutlich nicht aussagekräftig genug, da die CPU gerne auch mal stoppt um andere Programme laufen zu lassen. Man müsste den Test schon mehrmals und am Besten auf mehreren Maschinen wiederholen. |
|
Nach oben |
|
 |
nixsager
Anmeldungsdatum: 16.08.2007 Beiträge: 70
|
Verfasst am: 04.05.2011, 18:25 Titel: |
|
|
1. Da ich ich weiß wie ich das machen soll kommen ich gleich zu 2.
2. Jetzt müsste ich die fragen wie ich das machen soll, aber jetzt komme ich zu 3.
3. Kannst mir kein Beispiel-Code schreiben? |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 04.05.2011, 19:41 Titel: |
|
|
nixsager hat Folgendes geschrieben: | 3. Kannst mir kein Beispiel-Code schreiben? | Sir, Jawohl, Sir, sofort, Sir, hier bitte, Sir! |
|
Nach oben |
|
 |
SpionAtom
Anmeldungsdatum: 10.01.2005 Beiträge: 395
|
Verfasst am: 10.05.2011, 20:15 Titel: |
|
|
ich werde keinen kompletten Code schreiben, aber hier ein bisl:
Code: |
durchlaeufe = 32000
startzeit = TIMER
FOR i = 1 TO durchlaeufe
IF bla THEN
...
ELS IF blub THEN
...
ELSE IF blib THEN
...
ELSE
...
END IF
NEXT
zeit_1 = TIMER - startzeit 'hier wird die benötigte Zeit errechnet
startzeit = TIMER
FOR i = 1 TO durchlaeufe
SELECT zeugs
CASE bla: ....
CASE blub: ....
CASE blib: ....
CASE ELSE: ....
END SELECT
NEXT
zeit_2 = TIMER - startzeit 'hier wird die benötigte Zeit errechnet
PRINT "Zeit 1: ", zeit_1
PRINT "Zeit 2: ", zeit_2
|
irgendwie so, hab lange kein QB mehr gemacht..  _________________ Inzwischen gehöre ich auch zu den BlitzBasicern. Also verzeiht mir, wenn mir mal ein LOCATE 100, 100 oder dergleichen rausrutscht. |
|
Nach oben |
|
 |
nixsager
Anmeldungsdatum: 16.08.2007 Beiträge: 70
|
Verfasst am: 10.05.2011, 20:33 Titel: |
|
|
Danke.
Ich dachte irgendwie an eine andere Lösung, aber ich werde es mal ausprobieren. |
|
Nach oben |
|
 |
|