Подсчет количества очисток ГХ на объекте - PullRequest
5 голосов
/ 03 мая 2010

Как вести подсчет количества раз, которое объекты определенного класса (типа?) Удаляются в течение срока действия моего приложения. Представьте, что у меня есть класс A, теперь я хочу подсчитать, сколько раз объекты A собираются GC.

Я надеюсь, что формулирую это право, потому что меня спросили об этом сегодня в интервью, и ответ, который я дал, не удовлетворил интервьюера. И это то, о чем я думаю, он пытался спросить.

Я сказал, что можно сохранить статическое поле с именем count в классе A и увеличить его при вызове Finalize () этого объекта.

Ответ, который он ожидал, был нечто, называемое статическим блоком. Я никогда не слышал об этом в .NET / C #. Может кто-нибудь объяснить, что это за статический блок?

Ответы [ 3 ]

1 голос
/ 03 мая 2010

Используйте такой инструмент, как memprofiler , Redgate Ants , dotTrace , CLR Profiler (необходимы права администратора для .NET 3.5 очевидно ) или командное издание Visual Studio.

0 голосов
/ 03 мая 2010

Статический блок - это действительно другое имя для Статического Конструктора в C #. Он вызывается автоматически для инициализации класса перед созданием первого экземпляра. Я не вижу, как это поможет вам отслеживать, сколько раз класс расположен. Единственный способ, о котором я мог подумать, - это реализовать в вашем классе IDisposable, иметь статическое поле с именем disposeCount и увеличивать его при каждом вызове до Dispose или быть уверенным, как вы правильно сказали в методе Finalize. Ваш ответ был определенно не ошибочным, и вы должны указать им это, если вы получите второе интервью:)

0 голосов
/ 03 мая 2010

Может, он имел в виду статический конструктор для класса?

public class Foo {

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

}
...