Опрос использования памяти приложения С# во время выполнения?
У меня есть приложение, которое во время работы должно опросить его собственное использование памяти. Было бы идеально, если бы он мог перечислять использование памяти для каждого объекта, созданного экземпляром. Я знаю, что это может быть достигнуто 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();