2010-05-03 15 views
5

¿Cómo puedo contar el número de veces que los objetos de una clase específica (tipo?) Se eliminan durante la vida de mi aplicación. Imagina que tengo una clase A, ahora, quiero contar cuántas veces el GC recoge los objetos de A.Contando el número de GC limpiadas en un objeto

Espero estar expresando este derecho porque me preguntaron esto en una entrevista hoy y la respuesta que di no satisfizo al entrevistador. Y esto es lo que imagino que estaba tratando de preguntar.

Lo que dije fue que uno podría mantener un campo estático llamado recuento en la clase A y se incrementará en el Finalizar() llamada de ese objeto.

La respuesta que esperaba era algo llamado bloqueo estático. Nunca he oído hablar de esto en .NET/C#. ¿Alguien puede explicar qué es este bloque estático?

+3

cómo odio estas preguntas ... su respuesta es correcta porque funcionará. asker no quiere una respuesta correcta, pero quiere escuchar lo que piensa. esto es tan estúpido, creo. – Andrey

+1

Que yo sepa, no hay cosas tales como un "bloque estático" en C# o .NET. Su respuesta de usar una variable estática con un finalizador es apropiada. Un generador de perfiles de memoria también funcionaría. – LBushkin

+0

Voy a probar el memprofiler. Gracias por sus respuestas chicos. – tsps

Respuesta

0

¿Tal vez se estaba refiriendo a un constructor estático para la clase?

public class Foo { 

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

} 
+0

@plinth, esto es lo que pensé. Pero incluso en eso, ¿cómo puede ayudar esto a hacer un seguimiento de cuántas veces se elimina la clase? – James

+0

No es así. Esa es la parte confusa. – plinth

+0

Sí, creo que es un caso de 'esa es la respuesta que está en el libro'. No estoy seguro de qué libro estaban leyendo ... – James

0

Un bloque estático es realmente otro nombre para un Static Constructor en C#. Se llama automáticamente para inicializar una clase antes de que se cree la primera instancia. No puedo ver cómo esto te ayudará a llevar un registro de cuántas veces una clase está dispuesta. La única forma en que podría pensar sería que su clase implemente IDisposable, que tenga un campo estático llamado disposeCount y que lo incremente en cada llamada a Dispose o que esté seguro como dijo correctamente en el método Finalize. Su respuesta definitivamente no fue incorrecta, y usted debe señalarle esto si obtiene una segunda entrevista :)

+0

Lamentablemente, esa fue la última entrevista. Solo le dije que no estaba al tanto de algo así en .NET. Tendré más confianza con mis habilidades de .NET la próxima vez. :) – tsps

Cuestiones relacionadas