Можно ли отслеживать использование памяти в приложении C# без использования профилировщика?
Я хотел бы написать простое приложение, которое отслеживает текущее использование памяти, количество созданных объектов и т. Д. В C++ я обычно переопределяю оператор new, но по очевидным причинам я не могу этого сделать в C#. Есть ли способ сделать это без профилировщика?
Ответов (3)3
Возможно, вы захотите начать со сборщика мусора. В MSDN есть несколько участников, перечисленных здесь, которые могут показать вам, как сделать несколько вещей, например, получить общий объем памяти, который, по его мнению, выделен, сколько раз собирал сборщик мусора. Что-нибудь более сложное, например, подсчет объектов в загруженной сборке, и вам, вероятно, придется использовать профилировщик или написать что-нибудь самостоятельно.
Используя 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» в конце документа.
Удачи.