Как найти память, используемую каждым объектом в программе? - PullRequest
4 голосов
/ 28 апреля 2009

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

Например: я хочу знать, сколько памяти (в килобайтах) используется этим объектом "someclassinstance" ..

someclass someclassinstance = new someclass ();

Я вижу общий объем памяти, используемый приложением в диспетчере задач ... Но есть ли способ просмотреть подробный отчет об использовании памяти для каждого экземпляра объекта?

Примечание: я пробовал CLR profiler..но он показывает только общую память, используемую строками, насколько я знаю ... Он не показывает память, используемую каждым строковым объектом.

Спасибо

Ответы [ 5 ]

2 голосов
/ 28 апреля 2009

.NET Memory Profiler превосходен Он получил 14-дневную пробную версию и после этого довольно дешев. Это позволяет вам отслеживать все имеющиеся экземпляры, составлять их график и видеть, сколько памяти занимает каждый. Это дает вам огромное понимание того, что именно происходит в вашем приложении.

1 голос
/ 28 апреля 2009

CLR profiler бесплатен и может сделать это. Он имеет кривую обучения, но поставляется с необходимой документацией.

1 голос
/ 28 апреля 2009

Red Gate Software делает Ants Profiler, который, я считаю, даст вам необходимую информацию. Это определенно несвободно, но есть 15-дневная пробная версия, и в зависимости от того, достаточно ли у вас удачи иметь бюджет на программное обеспечение на вашей работе, вы можете его купить.

0 голосов
/ 28 апреля 2009

Бесплатный, чрезвычайно мощный и довольно сложный способ сделать это с Windbg + SOS

Этого сообщения в блоге должно быть достаточно, чтобы начать вас.

0 голосов
/ 28 апреля 2009

Количество выделенной памяти для new someclass является округленным sizeof (someclass); округление, вероятно, что-то вроде sizeof (someclass) + sizeof (void *) округляется до 32.

Это не скажет вам, что, если таковая имеется, память, которую someclass выделяет для своих членов.

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

Это может быть сделано в C ++, я не знаю о C #.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...