Опрос использования памяти приложения С# во время выполнения?

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

Ответы

Ответ 1

Две полезные функции:

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

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

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

Ответ 2

Process proc = Process.GetCurrentProcess();
Logger.Info(proc.PeakWorkingSet64/1024 + "kb");

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

Может

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