Autor Beitrag
deusr
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Fr 27.04.07 15:08 
Hallo Leute,

so langsam aber sicher fange ich schon an, zu verzweifeln. Aus irgendeinem Grund wird beim "löschen" einer Klasse Dispose nicht aufgerufen. Ich habe jetzt folgenden Code:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
        public static void Main()
        {
            abcClass bla= new abcClass();
            start_new_form();
        }


Die Variable bla wird jedoch nach dem Ende von Main() nicht disposed. Kann mir jemand sagen, wieso?
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Fr 27.04.07 15:22 
Die Garbage Collection in .NET definiert selbst die beste Zeit, um eine Collection durchzuführen. Das heißt, das Instanzen solange bestehen bleiben, bis der GC sich dazu entschließt, mal aufzuräumen.

Vielleicht hilft Dir dieser Artikel dazu: www.csharphelp.com/a...ves2/archive297.html
deusr Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Fr 27.04.07 15:28 
Ja, aber ich dachte eigentlich, dass ich mit Hilfe von IDisposable die Klasse zu einem Zeitpunkt löschen kann, an dem ich sie löschen will. Ala C++ Destructor. Oder habe ich den Sinn einer Dispose Funktion nicht ganz verstanden??
r2c2
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 324
Erhaltene Danke: 2

Linux

BeitragVerfasst: Fr 27.04.07 17:08 
Danmn musst du IDisposable aber auch benutzen, indem du Dispose aufrufst bzw. using() verwendest...

mfg

Christian

_________________
Kaum macht man's richtig, schon klappts!
Robert_G
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 416


Delphi32 (D2005 PE); Chrome/C# (VS2003 E/A, VS2005)
BeitragVerfasst: Mo 30.04.07 13:44 
Garbage collection und IDisposable haben, wenn überhaupt, dann nur indirekt etwas miteinander zu tun.
IDisposable ist ein Weg, um schön einfach, lokal begrenzt, ein Objekt benutzen und aufräumen zu können.
Es ist dann noch nicht freigegeben, aber es konnte selbst Dinge freigeben, die die GC nicht verwaltet.
Was du willst könnte ein Finalizer sein, also Code, der ausgeführt wird wenn eine Instanz freigegeben wird.
Da Finalizer einem GC Sweep signifikant mehr Arbeit aufhalsen, wäre eine Verwendung von IDisposable/using anzuraten.

Du kannst natürlich zur Sicherheit auch einen Finalizer schreiben, der aufräumt, falls der Benutzer deiner Klasse keine Ahnung hat wofür IDisposable gut ist.
In dem Fall solltest du aber im Dispose GC.SuppressFinalizer(this) aufrufen. Dadurch spart man sich den Finalizer bei einem GC Sweep.
Sollte aber alles in den .Net-Docs zu IDisposable noch ausführlicher zu lesen sein. ;-)