Seite 1 von 1

QDataStream / QBuffer

Verfasst: 5. September 2007 19:49
von sicker
Hi,

gibt es eine Möglichkeit dafür zu sorgen das QDataStream in Verbindung mit einem QByteArray nicht ungefähr 20kb Daten allociert? (QByteArray ist leer)
So wie es aussieht muss es etwas mit dem QBuffer zutun haben der für das QByteArray allociert wird.
Liegt der Fehler wie meistens zwischen meinen Ohren oder ist die Klasse einfach etwas bescheiden ?
Wäre sehr dankbar für eine schnell Antwort.

Gruss,

Sicker

Verfasst: 5. September 2007 20:14
von Christian81
Nunja - ein bischen IO-Puffer hier und da und schon sind die 20KB weg. Was ist so schlimm daran?

Verfasst: 5. September 2007 20:33
von sicker
Danke für die schnelle Antwort, stehe leider momentan auf dem Schlauch. Könntest du das etwas näher erläutern?

Verfasst: 5. September 2007 20:51
von Christian81
Ich habe damit gemeint dass es nicht verwunderlich ist wenn dafür 20KB benötigt werden.

Verfasst: 5. September 2007 21:16
von sicker
Aha, du willst mir also sagen das man 20kb benötigt um ein Stream interface auch auf ein Array zugreifen zu lassen?
Du solltest das mal den 64kb Democodern vorschlagen, die sind von dieser Antwort sicherlich begeistert.
Mal ganz abgesehen von meinem ungläubigen Staunen sehe ich nicht so ganz inwiefern das nun meine Frage beantwortet...

Gibt es vielleicht jemand der diese Frage sinnvoll beantworten kann bzw. will?

Verfasst: 5. September 2007 21:49
von Christian81
Du solltest schon ein Codebeispiel zeigen damit man dann mal sehen kann wer da wie viel Speicher braucht... und mit der Codingszene braucht man mit einem C++ - Programm schon gar nicht anzufangen :roll:

Ich sehe 20KB an der Stelle nicht wirklich als viel an. QDataStream ist, soviel ich weiss, ein buffered stream, also könnten allein der input und der output-buffer schon 20KB locker belegen.

Verfasst: 5. September 2007 22:03
von sicker
Soweit ich das sehe ist QDataStream mit QByteArray immer unbuffered.
Mal abgesehen davon halte ich 20kb schon für viel, da ich > 10000 Objekte davon brauche...

Verfasst: 5. September 2007 22:55
von Christian81
Gleichzeitig > 10000 Objekte halte ich für einen Designfehler. Und wie gesagt - ohne Code kann man auch nicht sagen wo der Speicher abgeblieben ist.

Verfasst: 6. September 2007 07:25
von CaptnChaos
wofür 10000 Objekte?? :shock:
von einem QDataStream?
also, wenns unbedingt sein muss, dann schreib dir besser selber ne klasse mit standard c++, die nur die funktionen hat, die du brachst und keinen Buffer besitzt. schau dich dafür mal bei codeproject um oder einfach bei google.

Verfasst: 6. September 2007 09:37
von RHBaum
Mal abgesehen davon halte ich 20kb schon für viel, da ich > 10000 Objekte davon brauche...
naja, also kann man davon ausgehen, das du entweder immens speicher in deinem System hast (den dein BS und deine runtime auch nutzen kann !!! ) oder deine Daten die du da rein spulst, sind ned wirklich allzugross.

Bei ersterem Fall solltes du eh kein Problem haben, die ca. 200 MB sollt das system ja locker eruebrigen koennen.

fuer den 2. fall halt ich dann einfach streams ned als das richtige mittel zum zweck.

Wie meine Vorredner schon sagten, prinzipiell wird ich das Design noch mal ueberpruefen, und mir genau anschauen, fuer was man streams eigentlich nehmen sollte und wann nicht.

Und wenn ich ich grenzbereiche komme, wo ich weder performance noch SPeicher verschenken darf, wuerd ich mich auch auf keine Biblo verlassen, erst recht ned auf die QT, sondern sogar die Implementationsdetails der stl impl meiden und auf Standard C ebene gehen, natuerlich nur fuer die kritischen bereiche.

Ciao ...