Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
The_Muh aka Mark Aroni

Anmeldungsdatum: 11.09.2006 Beiträge: 718
|
Verfasst am: 31.03.2010, 17:38 Titel: Listendurchlauf ist Rückwärts schneller |
|
|
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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 31.03.2010, 18:25 Titel: |
|
|
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 |
|
 |
Muttonhead

Anmeldungsdatum: 26.08.2008 Beiträge: 565 Wohnort: Jüterbog
|
Verfasst am: 31.03.2010, 18:38 Titel: |
|
|
@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.
keine Ahnung |
|
Nach oben |
|
 |
The_Muh aka Mark Aroni

Anmeldungsdatum: 11.09.2006 Beiträge: 718
|
Verfasst am: 31.03.2010, 19:34 Titel: |
|
|
Oh... das is ne jute frage... xD
Edit: nein, wird er nicht... wie peinlich...
meine güte... _________________ // nicht mehr aktiv // |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 31.03.2010, 20:27 Titel: |
|
|
deswegen sollte man auch bei benchmarks immernoch vergleichen ob die ergebnisse überhaupt stimmen  _________________ "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 |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4702 Wohnort: ~/
|
Verfasst am: 31.03.2010, 20:28 Titel: |
|
|
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  |
Jepp.  _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
The_Muh aka Mark Aroni

Anmeldungsdatum: 11.09.2006 Beiträge: 718
|
Verfasst am: 31.03.2010, 21:19 Titel: |
|
|
sonst i-wer nen plan um die performance zu steigern? _________________ // nicht mehr aktiv // |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 31.03.2010, 21:54 Titel: |
|
|
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 |
|
 |
|