Dispose()
-
Ja sicher, bin ja nicht auf die explizite Exception eingegangen.
Der Vollständigkeithalber noch wie man es richtig machen sollte:
private void WriteFile(byte[] data) { using(FileStream fs = new FileStream("mycsv.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite)) { fs.Write(myBytes, 0, myBytes.Length); fs.Flush(); } }
Bei dem Flush bin ich mir nicht mehr ganz sicher, ob's optional war wenn dispose implizit aufgerufen wird. - Ich lass es mal drin. - Schadet ja nicht.
-
Statt der using Anweisung, könnte man unten auch fs.Close(); verwenden ?
-
Ja gut beim Stream funktioniert das aufgrund der Implementierung von Close, da dieses intern Dispose aufruft. Dann stelle dir einfach vor, du ladst Bilder in deinem Programm. - Diese musst du ebenfalls explizit wieder freigeben und diese haben keine Close-Methode.
-
Ok, Danke für Euch !
-
inflames2k schrieb:
Ja sicher, bin ja nicht auf die explizite Exception eingegangen.
Achso. Auf Grund vom Satz davor dachte ich du meinst ne OutOfSonstwasException
inflames2k schrieb:
Bei dem Flush bin ich mir nicht mehr ganz sicher, ob's optional war wenn dispose implizit aufgerufen wird. - Ich lass es mal drin. - Schadet ja nicht.
Sollte egal sein.
Mit explizitem .Flush() gibt's halt nen anderen (u.U. aussagekräftigeren) Stacktrace wenn dabei 'was schief geht.
-
Ist es nicht so, dass wenn zu wenig zusammenhängender Speicher vorhanden ist,
die Garbage-Collection aufgerufen wird, und unerreichbarer Speicher freigegeben
wird ? Wenn ich in eine Bitmap-Variable bm, eine Bitmap1 lade und später eine
Bitmap2, dann ist die Bitmap1 unereichbar, und müsste von der Garbage-Collection
entfernt werden. Ist dieser Fall langsamer als bm.Dispose() ?
-
Der Garbage Collector wird einen Scheiß tun. Der gibt das Bild nicht frei wenn du nicht zuvor Dispose aufgerufen hast, hintergrund ist der, dass bis der GC irgendwann mal die Finalizer für die Bilder aufruft ist dein Speicher längst voll.
"Always call Dispose before you release your last reference to the Image. Otherwise, the resources it is using will not be freed until the garbage collector calls the Image object's Finalize method."
MSDN schrieb:
Rufen Sie Dispose auf, wenn Image nicht mehr benötigt wird. Die Dispose-Methode bewirkt, dass Image nicht mehr verwendet werden kann. Nach dem Aufruf von Dispose müssen Sie alle Verweise auf Image freigeben, sodass der von Image belegte Speicher bei der Garbage Collection wieder zugänglich gemacht werden kann.
Rufen Sie immer Dispose auf, bevor Sie den letzten Verweis auf Image freigeben. Andernfalls bleiben die verwendeten Ressourcen reserviert, bis die Garbage Collection die Finalize-Methode des Image-Objekts aufruft.
-
Ok, das habe ich nicht gewusst, Sorry
-
MSDN: "Rufen Sie immer Dispose auf, bevor Sie den letzten Verweis auf
Image freigeben." Dumme Frage: was heisst hier freigeben ?
-
Freigeben eines Verweises heißt hier das du den Member / die Variable auf Null setzt. - Je nach Scope ist das wichtig, da der GC nicths aufräumt wo Verweise drauf liegen.