2008-09-13 3 views
13

Кто-нибудь знает способ узнать, сколько памяти занимает экземпляр объекта?Узнайте, сколько памяти используется объектом в C#?

Например, если у меня есть экземпляр следующий объект:

TestClass tc = new TestClass();

Есть ли способ узнать, сколько памяти занимает экземпляр tc?

Причина в том, что, хотя C# имеет встроенное управление памятью, я часто сталкиваюсь с проблемами, не очищая экземпляр объекта (например, List, который отслеживает что-то).

Есть несколько достаточно хороших профилей памяти (например, ANTS Profiler), но в многопоточной среде довольно сложно понять, что принадлежит где, даже с этими инструментами.

ответ

2

У меня есть опыт работы с MemProfiler. Он дает вам стековые следы, когда объект был создан, и все графики того, почему объект по-прежнему не собирает мусор.

7

Если вы не пытаетесь сделать это в самом коде, который я принимаю на основе ссылки ANTS, попробуйте взглянуть на CLRProfiler (в настоящее время v2.0). Это бесплатно, и если вы не против довольно упрощенного пользовательского интерфейса, он может предоставить ценную информацию. Он даст вам подробный обзор всех видов статистики. Я использовал его некоторое время назад, как один инструмент для поиска лука-порея.

Скачать здесь: http://www.microsoft.com/downloads/details.aspx?FamilyId=A362781C-3870-43BE-8926-862B40AA0CD0&displaylang=en

Если вы хотите сделать это в коде, CLR имеет профилирование API, вы могли бы использовать. Если вы найдете информацию в CLRProfiler, так как она использует эти API, вы также сможете это сделать и в коде. Более подробная информация здесь: http://msdn.microsoft.com/de-de/magazine/cc300553(en-us).aspx

(. Это не так загадочно, как с помощью WinDbg, но будьте готово сделать могучую глубоко в CLR)

3

CLR Profiler, который обеспечивает свободные от Microsoft делает очень хорошую работу в этот тип вещь.

Введение в весь профайлер можно скачать here. Также Шаблоны & Практическая команда put something вместе некоторое время назад, подробно описывая, как использовать профилировщик.

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

Надеюсь, что это проливает некоторый свет. Счастливое профилирование!