Autor Beitrag
Rahvin
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Do 26.02.09 20:59 
Hallo,

ich hab ein kleines Programm geschrieben um Vorgänge zu verwalten. Der Benutzer kann zu jedem Vorgang beliebig viele Dokumente speichern. Das Vorgansobjekt samt Dateien wird zum Speichern in eine Datei serialisiert. Allerdings wird aus einer 100 kb Datei nach der Serialisierung eine ca. 2 MB große Datei. Ich speichere die Dateien in 2048 kb Blöcken in einer Arraylist.

Meine Frage: Gibt es eine Möglichkeit die Dateien platzsparender in einem Objekt zu speichern und zu serialisieren?

Bin für jeden Tip dankbat :).
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 26.02.09 23:26 
Ohne zu wissen, welchen Serializer du überhaupt benutzt, kann man dir nur schwer helfen :| . Aber dieser riesige Unterschied hört sich nach XML an und dann liegt es eben in der Natur der Sache. Wenn du an XML festhalten willst, wirst du die Daten wohl oder übel in einer zweiten Datei speichern müssen, also über einen Stream.

_________________
>λ=
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Fr 27.02.09 12:04 
Übrigens gehört ArrayList seit NET 2.0 in die Mottenkiste und sollte wie alle untypisierten Collections aus System.Collections nicht mehr benutzt werden. Verwende stattdessen List<T> und alle anderen typisierten Collections aus System.Collections.Generic. Jürgen
Rahvin Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Fr 27.02.09 21:13 
user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
Ohne zu wissen, welchen Serializer du überhaupt benutzt, kann man dir nur schwer helfen :| . Aber dieser riesige Unterschied hört sich nach XML an und dann liegt es eben in der Natur der Sache. Wenn du an XML festhalten willst, wirst du die Daten wohl oder übel in einer zweiten Datei speichern müssen, also über einen Stream.

Oh, hab ich ganz vergessen :D, es ist der Binary-Serializer. Das ist auch das, was mich etwas verwundert.

user profile iconJüTho hat folgendes geschrieben Zum zitierten Posting springen:
Übrigens gehört ArrayList seit NET 2.0 in die Mottenkiste und sollte wie alle untypisierten Collections aus System.Collections nicht mehr benutzt werden. Verwende stattdessen List<T> und alle anderen typisierten Collections aus System.Collections.Generic.

Die ArrayList war eigentlich auch nur eine Notlösung. Ich wollte die Datei eigentlich komplett in einen Byte-Array einlesen. Da der BinaryReader aber nur ein blockweises lesen zulässt, habe ich die einzelnen Blöcke in eine ArrayList gepackt ohne weiter drüber nachzudenken...
Wenn Du eine gute Lösung hast, um die Datei binär in einem Objekt zu speichern, bin ich ganz Ohr :D.
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Fr 27.02.09 21:19 
user profile iconRahvin hat folgendes geschrieben Zum zitierten Posting springen:
Das ist auch das, was mich etwas verwundert.
Ok, dann liegt es an der ArrayList. Stattdessen könntest du z.B. das Byte-Array von File.ReadAllBytes serialisieren. byte[] (und damit auch List<byte>) wird quasi ohne Overhead serialisiert.

_________________
>λ=
Rahvin Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: So 01.03.09 19:10 
user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconRahvin hat folgendes geschrieben Zum zitierten Posting springen:
Das ist auch das, was mich etwas verwundert.
Ok, dann liegt es an der ArrayList. Stattdessen könntest du z.B. das Byte-Array von File.ReadAllBytes serialisieren. byte[] (und damit auch List<byte>) wird quasi ohne Overhead serialisiert.


Danke, klappt bestens mit ReadAllBytes, die Dateien sind jetzt wesentlich kleiner :). Schon interessant was für einen Overhead die Arraylist hat.