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:

Listendurchlauf ist Rückwärts schneller

 
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
The_Muh
aka Mark Aroni


Anmeldungsdatum: 11.09.2006
Beiträge: 718

BeitragVerfasst am: 31.03.2010, 17:38    Titel: Listendurchlauf ist Rückwärts schneller Antworten mit Zitat

Hi, ich hab grad mal wieder an meiner Stringlist gebastelt und die idee für nen netten "turbo" bekommen: einfach das zuletzt aufgerufene element zwischenspeichern (nummer, pointer auf das element) und dann beim aufrufen des .item-propertys vergleichen ob das angeforderte Item +1 oder -1 des zuletzt aufgerufenen Elements liegt, wenn ja, einfach den pointer hernehmen und anhand der elemente v_prev bzw v_next zum angefordertem element springen.
Das ist auch wesentlich schneller bei For-durchläufen. Was mich aber wundert ist, das ein Rückwärts-durchlauf (100 to 1) wesentlich (sehr wesentlich) schneller als der vorwärtsdurchlauf ist. da sieht dann sogar das Array alt aus.

Kann mir wer verraten woran es liegt?
Liste:http://tresax.de:3001/code?id=60
test.bas: http://tresax.de:3001/code?id=61

Der aufruf des elements erfolgt per .item, der Property ist in zeile 93 bis 123 in der stringlist.bi zu finden.

ich hoffe ihr könnt mir erklären warum das rückwärts schneller geht.
_________________
// nicht mehr aktiv //
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 31.03.2010, 18:25    Titel: Antworten mit Zitat

Ohne irgendwie den Code angeschaut oder lange nachgedacht zu haben: Wenn der Code ansonsten exakt gleich ist, ist hier vielleicht die Hit-Rate im Cache höher als bei der anderen Variante.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Muttonhead



Anmeldungsdatum: 26.08.2008
Beiträge: 565
Wohnort: Jüterbog

BeitragVerfasst am: 31.03.2010, 18:38    Titel: Antworten mit Zitat

@The_Muh:
Code:
 
  For i As Integer = 100 To 1

        dummy = test2.item(i)

    Next


Wird dieser Code überhaupt ausgeführt, ohne step -1
Vllcht kommt daher diese Mörder-Geschwindigkeit. lächeln

keine Ahnung
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
The_Muh
aka Mark Aroni


Anmeldungsdatum: 11.09.2006
Beiträge: 718

BeitragVerfasst am: 31.03.2010, 19:34    Titel: Antworten mit Zitat

Oh... das is ne jute frage... xD

Edit: nein, wird er nicht... wie peinlich... mit dem Kopf durch die Mauer wollen
meine güte...
_________________
// nicht mehr aktiv //
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 31.03.2010, 20:27    Titel: Antworten mit Zitat

deswegen sollte man auch bei benchmarks immernoch vergleichen ob die ergebnisse überhaupt stimmen lächeln
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 31.03.2010, 20:28    Titel: Antworten mit Zitat

Der Code wird schon ausgeführt, aber er springt sofort von FOR an das Ende von NEXT. Nur der Schleifenrumpf wird nicht ausgeführt. *klugscheiß*

MisterD hat Folgendes geschrieben:
deswegen sollte man auch bei benchmarks immernoch vergleichen ob die ergebnisse überhaupt stimmen lächeln

Jepp. happy
_________________
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
The_Muh
aka Mark Aroni


Anmeldungsdatum: 11.09.2006
Beiträge: 718

BeitragVerfasst am: 31.03.2010, 21:19    Titel: Antworten mit Zitat

sonst i-wer nen plan um die performance zu steigern?
_________________
// nicht mehr aktiv //
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 31.03.2010, 21:54    Titel: Antworten mit Zitat

es is ne linked list, solang du ne datenstruktur nicht mit indizes versiehst (arbeit!) kriegst du keine schnelleren zeiten hin.

Verlinkte Liste -> suchen in O(n), einfügen / entfernen in O(1). das geht einfach nicht schneller (von der komplexität her): wenn du die liste doppelt so groß machst dauert das suchen doppelt so lang, egal wie viele micro-optimierungen du einbaust.

Je nach anwendungsgebiet kannst du dir natürlich überlegen, ne andere datenstruktur zu benutzen, die vielleicht besser passt.
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
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