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.