2010-09-24 3 views
0

Мне интересно узнать, сколько объектов было исправлено сборщиком мусора после запуска следующего кода.Узнать, сколько объектов было исправлено сборщиком мусора C#

if (ObjectsOutstanding > GCThreshold) { 
    System.GC.Collect(); 
} 
+2

Это редко желательно звонить GC.Collect –

+0

может быть, вы можете переопределить метод доработать и поставить счетчик для регистрации каждого вызова этого метода, но я не уверен, если вы можете сделать это. –

+0

Все виды объектов или вы проверяете свои собственные объекты? –

ответ

2

Одним из простых способов сделать это для ваших собственных пользовательских типов было бы увеличение и отслеживание некоторых счетчиков в их финализаторах.

например.

public class MyCustomType 
{ 
    public static int NumFinalizersCalled; 

    ~MyCustomType() 
    { 
     Interlocked.Increment(ref NumFinalizersCalled); 
    } 
} 
+0

@ Хенк Холтерман: 'GC.WaitForPendingFinalizers' исправит это, не так ли? – Ani

+1

Я бы бросил директиву прекомпилятора '#if DEBUG' там, чтобы он не попал в сборку релиза. –

0

В Visual Studio отладчик можно использовать SOS library в ближайшем окне. Существует несколько методов GC, которые дают вам необходимую информацию. Я не знаю, это то, что вы хотите, но это отправная точка.

Смежные вопросы