Можно ли отслеживать использование памяти в приложении C# без использования профилировщика?

Я хотел бы написать простое приложение, которое отслеживает текущее использование памяти, количество созданных объектов и т. Д. В C++ я обычно переопределяю оператор new, но по очевидным причинам я не могу этого сделать в C#. Есть ли способ сделать это без профилировщика?

Ответов (3)

Решение

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

Счетчики производительности .NET Memory предоставят вам совокупную информацию, но не включают счетчики объектов. Для этого вам понадобится профилировщик.

Используя WMI попробуйте:

Чтобы получить использование процесса (W2K3 / 2K8):

"SELECT IDProcess, PercentPrivilegedTime, PercentProcessorTime, PercentUserTime FROM Win32_PerfFormattedData_PerfProc_Process where Name='process_name.exe'"

Чтобы идентифицировать ваш сайт, используйте это:

"SELECT ProcessId, CommandLine, WorkingSetSize, ThreadCount, PrivatePageCount, PageFileUsage, PageFaults, HandleCount, CreationDate, Caption FROM Win32_Process where Caption='process_name.exe'"

Используйте этот инструмент для тестирования WQL

Или воспользуйтесь инструментом PerfMon.

Дополнительные сведения о счетчиках см. В разделе « Учет диспетчера системных ресурсов Windows» в конце документа.

Удачи.