2009-05-19 3 views
2

Есть ли способ узнать, кто держит ссылку на объект?Есть ли способ узнать, кто владеет ссылкой на объект?

Я вижу, что мой объект не завершен д'ором после вызова GC.Collect.

+1

Почему вы звоните GC.Collect? Не беспокойтесь об очистке памяти, а для других ресурсов, кроме памяти, вы должны реализовать IDisposable и Dispose. –

+0

Я бросил ответ ниже, но я предполагаю, что вы вызываете GC.Collect() для целей отладки. Помимо этого, я согласен с Джоэлем - пусть GC заботится о том, когда собирать. Вы можете вызвать больше проблем, чем исправлять его вручную. – JMarsch

+0

Исправить. Я вызываю GC.Collect() только для отладки. Я хочу убедиться, что мой объект завершен. – reshefm

ответ

4

В коде нет эффективного способа сделать это. Лучший способ отслеживать утечки такого типа - использовать такой инструмент, как WinDbg. Расширение SOS имеет несколько команд, которые специально разработаны для отслеживания утечек памяти.

Рико сделал запись тщательного блога на тему:

2

Вы должны позвонить GC.WaitForPendingFinalizers после GC.Collect, чтобы сборщик мусора, чтобы очистить freachable очередь. Поскольку GC работает в другом потоке, возможно, что ваше приложение перешло, а GC пытается завершить любые объекты, требующие завершения. Вызывая GC.WaitForPendingFinalizers, вы заставляете свой текущий поток ждать, пока GC закончит очищать свободную очередь (очередь элементов, требующих завершения), прежде чем возобновлять выполнение.

Это, однако, я согласен с комментарием Джоэла Коэхорна - GC работает лучше всего, когда вы оставите его в покое.

2

В дополнение к Windbg вы можете использовать профилировщик .net. Я сделал это в обоих направлениях - профиль не скажет вам ничего, что Windbg не может, но хороший профилировщик немного более дружелюбен.

Windbg В дополнение к ссылке от JaredPar у Тесс Феррандес есть отличные статьи по использованию Windbg с .net. Вот аа статья утечка памяти: http://blogs.msdn.com/tess/archive/2006/01/23/516139.aspx

Profiler: У меня было большой удачей с профилировщика SCITECH в (я не связан каким-либо образом, отличный инструмент, хотя): http://memprofiler.com/

Они имеют некоторые большие how- к видео на их сайте также.