Опрос использования приложением C # памяти во время выполнения? - PullRequest
19 голосов
/ 21 января 2009

У меня есть приложение, которое во время работы должно опрашивать свое собственное использование памяти. Было бы идеально, если бы он мог перечислить использование памяти для каждого экземпляра объекта. Я знаю, что это может быть достигнуто с помощью WMI, но я надеялся на то, что не зависит от WMI.

Ответы [ 5 ]

29 голосов
/ 21 января 2009

Две функции, которые могут оказаться полезными:

  GC.GetTotalMemory();
  Process.PagedMemorySize64();

Мой опыт показывает, что GC.GetTotalMemory () не очень надежна. Он часто сообщает об использовании памяти, которое намного меньше, чем фактическое использование памяти. Я видел сообщение о том, что я использую только 8 гигабайт, когда моей программе не хватает памяти на компьютере с 16 гигабайтами.

Я еще не тестировал Process.PagedMemorySize64, хотя выглядит многообещающе.

6 голосов
/ 27 апреля 2010
Process proc = Process.GetCurrentProcess();
Logger.Info(proc.PeakWorkingSet64/1024 + "kb");
2 голосов
/ 21 января 2009

Вы можете получить некоторую грубую детализацию вашего процесса из System.Diagnostics, класса Process. http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx.

Ничего из того, что относится к каждому объекту, но по крайней мере некоторую информацию о вашем процессе можно почерпнуть.

2 голосов
/ 21 января 2009

Вы можете прослушивать счетчики perfmon, которые предоставят вам много данных (активность GC / использование физической памяти / управляемая куча и т. Д.)

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

0 голосов
/ 17 декабря 2015

Может

Windows::System::Diagnostics::ProcessDiagnosticInfo::GetForCurrentProcess();
...