Любой способ в приложении C # / .NET, чтобы получить разбивку памяти, выделенной для каждого типа в памяти? - PullRequest
0 голосов
/ 25 января 2012

У меня есть приложение, которое потребляет много данных в реальном времени, и потому что оно делает так много, оно довольно медленно в VS 2010, и это вызывает его сбой различными способами.

Так что мне было интересно, есть ли какой-нибудь способ, кроме этого профилировщика, который я могу узнать, сколько памяти в байтах, скажем, выделено для каждого типа в памяти, и периодически выводить ее?

Это довольно большое приложение, поэтому добавить мои собственные счетчики не реально ...

Ответы [ 3 ]

2 голосов
/ 25 января 2012

Вам необходимо использовать профилировщик памяти.

Есть много вокруг, некоторые бесплатные и некоторые коммерческие.

Также см. Какие хорошие профилировщики .NET?

0 голосов
/ 25 января 2012

Я хотел бы предложить для получения общей информации массово использовать Process Explorer .Однажды, когда вы конфигурируете, вам нужно глубже понять вещи (например, какие объекты находятся в куче), лучший инструмент I , используемый для профилирования, - JetBrains Memory and Performance profiler ,Этот оплачивается только.

Если вам нужен только профилировщик производительности, есть действительно хорошо бесплатно опция Equatec Performance profiler

Удачи.

0 голосов
/ 25 января 2012

Нет простого универсального способа сказать GetBytesUsedForInstance(object), но это зависит от того, для чего вам нужны данные (если только все ваши типы не являются типами значений, в этом случае они должны быть относительно простыми).

У нас есть кэш в памяти для части нашего приложения. Мы больше всего заботимся об относительном количестве используемой памяти - т.е. общий размер кэша в два раза больше, чем вчера. Для этого мы сериализуем наши графы объектов в поток и принимаем длину потока (а затем отбрасываем поток). Это не точное измерение того, «сколько памяти использует тип» как таковое, но полезно для этих сравнительных сравнений.

Кроме этого - я думаю, что вы застряли с помощью профилировщика. Я очень рекомендую SciTech Memory Profiler - я им часто пользуюсь. Он хорошо интегрируется в Visual Studio, работает быстро (последняя версия в любом случае) и дает чрезвычайно полезные детали.

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