РЕДАКТИРОВАТЬ: Срок действия награды истек, но если сообщество захочет наградить ее кому-то, я выбираю Рафул Чизкиягу.
У меня утечка памяти в одном из мои программы C# Winforms, и я хотел бы построить график использования памяти с течением времени, чтобы лучше понять, что может быть причиной утечки. Проблема в том, что ни одна из обычных команд c диагностики памяти не соответствует тому, что диспетчер задач объявляет потребляемой памятью для этого процесса. Я предположил, что это, возможно, было связано с тем, что приложение, использующее небезопасный / неуправляемый код, не было включено в общее количество. использование памяти в реальном времени. Я использую 5 ярлыков, каждая из которых имеет различные функции (в основном это отсюда ): Environment.WorkingSet
, GC.GetTotalMemory(false)
, GC.GetTotalMemory(true)
, Process.GetCurrentProcess().PrivateMemorySize64
и Process.GetCurrentProcess().WorkingSet64
.
Удивительно ( или, может быть, нет, вздох), я все еще не могу сопоставить ни одно из этих пяти чисел с диспетчером задач Windows 10. Вот скриншот:
Итак, в основном я ищу это число 5,1 МБ. Как мне незаметно извлечь этот скрытый номер из фреймворка. NET?
Вот код, который у меня есть в функции таймера:
private void timer1_Tick(object sender, EventArgs e)
{
//Refresh();
label1.Text = "Environment.WorkingSet: " + Environment.WorkingSet ;
label2.Text = "GC.GetTotalMemory(false): " + GC.GetTotalMemory(false) ;
label3.Text = "GC.GetTotalMemory(true): " + GC.GetTotalMemory(true) ;
Process proc = Process.GetCurrentProcess();
label4.Text = "proc.PrivateMemorySize64: " + proc.PrivateMemorySize64 ;
label5.Text = "proc.WorkingSet64: " + proc.WorkingSet64 ;
proc.Dispose();
}
Как может быть очевидно, я пробовал с и без команды Refresh()
безрезультатно.
РЕДАКТИРОВАТЬ: Срок действия награды истек, но если сообщество желает наградить ее кому-то, я выбираю Рафул Чизкияху.