Hallo,

ich schreibe gerade ein WindowsService der eine JobListe aus einer SQL 
Datenbank abarbeitet.  Trift
ein neuer Job ein, so soll dieser ein  Backup von einem Gerät machen. Die 
gesicherten Daten
werden dann in eine Tabelle der Datenbank geschrieben. Dies funktioniert alles 
wunderbar.

So nun zu meinem Problem. 

Während der Dienst ein Backup Job abarbeitet benötigt dieser immer 50 
- 200 MB an
Speicher.  

Ich habe herrausbekommen, das die exzessive Speichernutzung dann anfängt, 
wenn ich die Dateien
(als Byte-Array) in die Datenbank (über eine Stored Procedure) schreibe.  
(Dazu habe ich ein File-Objekt, in dem die Datei als Byte-Array gelesen und 
dann mit diversen
Eigenschaften in die DB geschrieben wird. Diese Objekte sind weder global noch 
in einer Collection
gespeichert und werden immer nur dann erzeugt wenn diese auch in die DB 
geschrieben oder aus dieser
gelesenen werden.)  

Meine Probedateien sind alle nicht besoders groß (einige ca. 200kB und 
eine 5MB groß). 
Schon alleine deswegen sind die beanspruchten Speichergrößen nicht 
gerechtfertigt. 

Das der Dienst, während er einen Job bearbeitet, soviel Speicher 
benötig ist eigendlich
zu verkraften, aber er gibt diesen nicht wieder Frei wenn der Thread, in dem 
der Job abgearbeitet
wird, sich beendet. Selbst wenn man andere Programme startet, ändert sich 
nichts an der
Auslastung des Speichersbereichs (für diesen Dienst). (Dieser müsste 
doch dann eigentlich
freigegeben werden?!) Erst wenn ein weiterer Job gestartet wird, verändert 
sich die
Speichernutzung und bleibt danach wiederrum unverändert, je nachdem 
wieviel Speicher die
letzte Datei benötigte.

Ich weiß das die Arbeit des Garbage Collectors nicht vorhersagbar ist, 
aber dennoch sollte man
meinen das auf einem System mit 256 MB Ram (minus Grafikspeicher) dieser ab und 
zu mal in Funktion
tritt. Aber der Dienst bleibt unverändert bei der selben Speichernutzung 
stehen.  Ausserdem
weiß ich das es nicht besonders effektiv ist den GC zu "Befehlen" seine 
Arbeit zu verrichten.
(Performancegründe etc.)

Kann es sein das ich grundlegende Sachen vergesse? 

Danke und Gruß,

Stefan M.

Antwort per Email an