Reference Counting oder ähnliches eines Objektes des GCs herausfinden?
-
Ich bräuchte eine ganz einfache Funktion, welche überprüft, ob das Objekt noch anderswo genutzt wird oder nur noch in dieser einen Referenz, mit welcher ich die Überprüfung mache. Der GC muss ja sowieso Buch darüber führen, daher dachte ich, dass es vielleicht gleich eine solche Funktion geben könnte.
Ansonsten auch nicht weiter schlimm, ich kann es sehr einfach auch selber implementieren. Wollte nur gefragt haben, weil es mich auch interessiert
Hintergrund ist: Ein Objekt darf nicht aus einer Liste gestrichen werden, solange es anderswo im laufenden Prozess genutzt wird. Vielleicht kennt ihr ja auch noch eine andere Möglichkeit, wie man das realisieren könnte.
Grüssli
-
Naja es gibt weak references. Das dumme an denen ist bloss, dass die sofort auf "null" gehen, sobald das Objekt collected wird.
http://msdn.microsoft.com/en-us/library/system.weakreference.aspx
D.h. du weisst dann zwar "jetzt isses weg", aber du kannst vorher nixmehr damit machen.
Ansonsten gibt es keine mir bekannte Möglichkeit. Der GC hält ja keinen Ref-Count für Objekte, sondern ermittelt während einer Collection ob es noch einen Weg gibt, das Objekt über "roots" zu erreichen.
D.h. der GC weiss nur am Ende einer Collection welche Objekte sicher nichtmehr "gerootet" sind, und verschmeisst die dann. Zwischen zwei Collections weiss der garnix. (OK, stimmt bei modernen GCs vermutlich nicht ganz, aber kommt denke ich gut genug hin)
-
Afaik führt der GC kein Buch sondern "sucht" bei jedem Lauf nach Verweisen.
Eventuell wäre eine WeakReference was (http://msdn.microsoft.com/de-de/library/system.weakreference(VS.80).aspx => http://msdn.microsoft.com/de-de/library/system.weakreference.isalive(VS.80).aspx ).
Hängt davon ab was Du genau machst.
-
Die
WeakReference
kannte ich noch nicht, aber leider nicht das, was ich suche. Aber ich merke es mir für später, das kann man sicher noch gut verwenden.Naja, ich überdenke vielleicht auch nochmals mein Design. Es sollte eigentlich eine Optimierung werden. Aktuell habe ich Formeln, welche Variablen beinhalten. Diese Variablen haben einen Namen gespeichert und gehen bei jeder Berechnung von neuem ihren Wert in einem
Dictionary
holen. Ich könnte grundsätzlich diese Beziehung bereits beim Parsen auflösen und genau festlegen, welches Objekt zu welcher Variable gehört. Das Problem wäre dann halt nur, dass man das ursprüngliche Objekt nicht mehr verändern darf, sonst verweisen die Variablen Objekte in den Formeln auf falsche Objekte und der Fehler fällt nicht auf.
Daher wollte ich einfach eine Sicherheitsprüfung einbauen, falls man ein Objekt rauslöschen möchte, welches noch in einer Formel verwendet wird.Caching oder ähnliches geht hier leider nur sehr schwer, werde aber dies auch nochmals in Betracht ziehen. Wobei ... moment ...
Mit einerWeakReference
wäre etwas in Richtung von Caching vielleicht möglich. Hmmm ...Naja, ich überlege mir das dann nochmals nach einer Runde gesundem Schlaf
Grüssli