2010-05-03 4 views
5

Wie kann ich zählen, wie oft Objekte einer bestimmten Klasse (Typ?) In der Lebensdauer meiner Anwendung entsorgt werden? Stellen Sie sich vor, ich hätte eine Klasse A, jetzt möchte ich zählen, wie oft die Objekte von A vom GC abgeholt werden.Anzahl der GC-Bereinigungen für ein Objekt zählen

Ich hoffe, ich formuliere dieses Recht, weil ich das heute in einem Interview gefragt wurde und die Antwort, die ich gab, hat den Interviewer nicht befriedigt. Und ich stelle mir vor, dass er versucht hat, zu fragen.

Was ich sagte, war, dass man ein statisches Feld Zählung in der Klasse A und erhöht sie in dem Finalize() Aufruf des Objekts genannt halten konnte.

Die Antwort, die er erwartete, war ein statischer Block. Ich habe noch nie davon in .NET/C# gehört. Kann jemand erklären, was dieser statische Block ist?

+3

Wie ich diese Fragen hasse .... Ihre Antwort ist richtig, weil es funktioniert. Fragesteller will keine richtige Antwort, will aber hören, woran er denkt. Das ist so dumm, denke ich. – Andrey

+1

In C# oder .NET gibt es meines Wissens keine "statischen Blöcke". Ihre Antwort, eine statische Variable mit einem Finalizer zu verwenden, ist angemessen. Ein Speicherprofiler würde auch funktionieren. – LBushkin

+0

Ich werde den Memprofiler ausprobieren. Danke für deine Antworten Jungs. – tsps

Antwort

0

Vielleicht bezog er sich auf einen statischen Konstruktor für die Klasse?

public class Foo { 

    public static Foo() { /* gets called once before first operator new */ } 

} 
+0

@plinth, das ist, was ich dachte. Aber wie kann Ihnen das dabei helfen, zu verfolgen, wie oft die Klasse entsorgt wird? – James

+0

Es tut es nicht. Das ist der verwirrende Teil. – plinth

+0

Ja, ich denke, es ist ein Fall von "das ist die Antwort, die in dem Buch ist". Nicht ganz sicher, welches Buch sie gelesen haben ... – James

0

Ein statischer Block ist wirklich ein anderer Name für ein Static Constructor in C#. Es wird automatisch aufgerufen, um eine Klasse zu initialisieren, bevor die erste Instanz erstellt wird. Ich kann nicht sehen, wie Ihnen das hilft, den Überblick zu behalten, wie oft eine Klasse tatsächlich disponiert ist. Ich könnte nur daran denken, dass Ihre Klasse IDisposable implementieren, ein statisches Feld mit der Bezeichnung haben und es bei jedem Aufruf auf Dispose erhöhen oder um sicher zu sein, wie Sie richtig in der Finalize Methode gesagt haben. Ihre Antwort war definitiv nicht falsch, und Sie sollten darauf hinweisen, wenn Sie ein zweites Interview bekommen :)

+0

Leider war das das letzte Interview. Ich habe ihm gerade gesagt, dass mir sowas in .NET nicht bekannt ist. Ich werde beim nächsten Mal mehr Vertrauen in meine .NET-Kenntnisse haben. :) – tsps

Verwandte Themen