C# und object allocation
-
Hallo,
ich hab eine Frage bezuegl. Object allocation - wie verhaelt sich zB folgendes Beispiel:
while ( true ) { MyObject o = new MyObject(); }
Wird o jemals frei gegeben? Es kommt doch niemals out of scope - oder erzeugt ein neuer Schleifendurchlauf, dass o "freigegeben" wird?
danke im Voraus!
-
Er müsste doch für jeden Schleifendurchlauf ein neues Objekt erzeugen und an die Referenz o dranhängen. Das Objekt, welches vorher dranhing ist nun verwaist und ein Kandidat für den GC.
-
aha ok. Also kein Grund fuer ein Memory Leak...
schadedanke fuer die rasche Antwort!
-
warum?
hast Du memorry leaks?
-
naja, ich hab bei einem (fremden) Programm das Problem, dass nach einiger Zeit (Tagen...) eine OutOfMemory Exception geworfen wird.
Naja und ich such halt herum und halte nach MemoryLeaks ausschau, die halt dafuer verantwortlich sein koennten.
Hast du eine Idee, wonach ich im Speziellen ausschau halten koennte?danke!
-
Dann werden die Objekte aber nicht freigegeben, sondern sind noch mit einem lebenden Objekt verknüpft.
Vielleicht irgendwelche unmanaged Ressourcen?
\Edit: Diese vllt mit using kapseln, welche IDisposable implementieren?
-
Events sind so ein Kandidat.
Da werden strong refs erzeugt, die die Objekte am leben erhalten lassen, obwohl das event "umgehängt" wurde.
-
http://www.codeproject.com/KB/dotnet/Memory_Leak_Detection.aspx
Könnte weiterhelfen.
Simon
-
Oft helfen Profiler solche Probleme zu lösen.
Z.B. der von VS, oder ANTS.
-
danke fuer eure antworten soweit!
wie schaut das mit den events aus? wie schauts da mit objektdeallokation aus? was muss man da als programmierer selber machen?
danke nochmal!
-
was muss man da als programmierer selber machen?
1. Dispose aufrufen, wenns implementiert ist.
2. Aufpassen, dass die String Refs wieder gelöscht werden wenn nicht mehr gebraucht. Z.B. bei den Events auch wieder -= durchführen (nicht nur +=).Simon