redimensionierung von arrays
-
MBCS-CITP schrieb:
Grundsaetzlich: Ein Array benutzt man dann, wenn weiss, wie gross die Datenmenge ist. Ist das nicht bekannt, arbeitet man mit einer verkettenen List, bei dieser kann man schnell und einfach Element anhaengen, einfuegen, loeschen, umsortieren etc. etc.
Sofern du nicht häufig (was auch das sein mag
) an deinem "Array" rumänderst,
sondern bevorzugt den Inhalt lesen musst, ist vector bei weitem die performantere
Lösung. Insofern überleg dir einfach mal was du mit deinem "Array" so alles tun
willst oder musst bevor du dich entscheidest.
Von der Performance her ist dein VB-Redim sicher NICHT schneller als der vector.
-
MBCS-CITP schrieb:
Grundsaetzlich: Ein Array benutzt man dann, wenn weiss, wie gross die Datenmenge ist. Ist das nicht bekannt, arbeitet man mit einer verkettenen List
wer hat dich denn diesen quatsch gelernt?
von der überzeugungsstärke und der katastophalen falschheit her paßt das nur zur IHK.wetten, daß es deutlich schneller ist, 1000000 ints in einen vector zu stopfen als in eine verkettete liste? wetten, es macht gar nix aus, daß der vector dabei 16-mal wachsen muss und dabei 16-mal new aufruft und fast 2000000 ints kopieren muss? wetten, deine schäbige verkettete liste braucht für 1000000 aufrufe von new viel viel länger?
alle generalisierungen sind falsch.
selbst, wenn wir jetzt einsehen, daß der vector erheblich schneller ist als die verkettete liste. es gibt fälle, wo die liste schneller ist. ich sage deswegen besser nix mit "grundsätzlich" am anfang.
-
MBCS-CITP schrieb:
Grundsaetzlich: Ein Array benutzt man dann, wenn weiss, wie gross die Datenmenge ist. Ist das nicht bekannt, arbeitet man mit einer verkettenen List, bei dieser kann man schnell und einfach Element anhaengen, einfuegen, loeschen, umsortieren etc. etc.
Was sagt dir Random Access zur Performance einer Liste?
mfg
v R
-
Redhead schrieb:
Von der Performance her ist dein VB-Redim sicher NICHT schneller als der vector.
ähm. doch. es benutzt nämlich malloc, free und realloc. und realloc klappt ja bei nur einem vector und sonst nix im freispeicher/heap immer. punkt für basic.
-
volkard schrieb:
Redhead schrieb:
Von der Performance her ist dein VB-Redim sicher NICHT schneller als der vector.
ähm. doch. es benutzt nämlich malloc, free und realloc. und realloc klappt ja bei nur einem vector und sonst nix im freispeicher/heap immer. punkt für basic.
Bist du sicher, bzw. woher weisst du das ?? Ausserdem ist ein VB-Array (= SAFEARRAY) schon ein bisschen mehr als ein normaler C-Array.
-
Wenn aus einen "Schwung" eine Anzahl, sagen wir 10^6 Elemente kommen, dann allociert man einmal ein Array, liest die Zahlen ein und baut dann die Pointerbeziehung in der Liste, kommt ein zweiter Schwung Zahlen, dann wiederholt man das und verbindet beide Liste ueber die Zeiger.
-
MBCS-CITP schrieb:
Wenn aus einen "Schwung" eine Anzahl, sagen wir 10^6 Elemente kommen, dann allociert man einmal ein Array, liest die Zahlen ein und baut dann die Pointerbeziehung in der Liste, kommt ein zweiter Schwung Zahlen, dann wiederholt man das und verbindet beide Liste ueber die Zeiger.
du hast mit wendungen wie "dann allociert man" so eine allgemeingültigkeit, der ich einfach widerspreche. nein, es ist nicht so, wie du es darstellt.
-
Redhead schrieb:
Bist du sicher, bzw. woher weisst du das ?? Ausserdem ist ein VB-Array (= SAFEARRAY) schon ein bisschen mehr als ein normaler C-Array.
das weiß ich aus einfachen überlegungen.
aber ich bezog mich nicht auf VB.net, sondern auf das alte VB. eine welt ohne objektorientierung.
-
volkard schrieb:
Redhead schrieb:
Bist du sicher, bzw. woher weisst du das ?? Ausserdem ist ein VB-Array (= SAFEARRAY) schon ein bisschen mehr als ein normaler C-Array.
das weiß ich aus einfachen überlegungen.
aber ich bezog mich nicht auf VB.net, sondern auf das alte VB. eine welt ohne objektorientierung.Hab dabei auch ausschliesslich an VB6 gedacht. Wie kommst du auf VB.net

Deine Überlegungen würden mich schon interessieren, man lernt ja gern dazu.
-
Redhead schrieb:
Hab dabei auch ausschliesslich an VB6 gedacht. Wie kommst du auf VB.net

bei VB6-arrays würde ich realloc benutzen, wo es nur möglich ist. und da die leute von ms nicht dof sind, machen die das auch. das war mein weg, herauszufinden, daß bei vb6 realloc beliebt ist. und auf vb.net schloss ich, weil du irgendwie sicher schienst, daß die leute kein realloc verwenden. ich könnte mir gut voestellen, daß die VM kein realloc bietet.
mal das wort SAFEARRAY verfolgen...
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/automat/htm/chap7_9ntx.asp
"FADF_FIXEDSIZE 0x0010 An array that may not be resized or reallocated."
hmm. irgendwas verleutet mich jetzt zu der annahme, daß dieses flag sogar sagt, wann realloc benutzt werden darf. das entsprechende if(realloc klappt) return; else wachseNormal; hüpft ganz von alleine in den code. der entwickler kann sich nicht wehren. eines morgens werden die heinzelmänchen es eingebaut haben.