Я пытаюсь отследить утечку памяти в моем приложении .NET.Диспетчер задач Windows сообщает, что использование памяти остается постоянным, в то время как Process Explorer сообщает, что использование памяти увеличивается.
В диспетчере задач я просматриваю единственный столбец памяти «Память».(Частный рабочий набор) ».В Process Explorer я просматриваю столбец «Private bytes», потому что он поднимается, а значение в «Working set» - нет.
Теперь, безусловно, Process Explorer является правильным, потому что после нескольких выделений мойприложение вылетает с исключением Недостаточно памяти .Вопрос в том, почему диспетчер задач искажает использование памяти приложением ?Мало того, это также неверно отображает глобальную свободную память системы (график на вкладке «Производительность» остается постоянным).
Мой код не нужен, но здесь он для полноты. Это показывает пустое окно, которое содержит большой массив.При нажатии любой клавиши окно закрывается, и открывается новый, содержащий новый массив.Старое окно просочилось, вероятно, из-за ошибки в библиотеке графического интерфейса qt4dotnet.
using System;
using com.trolltech.qt.gui;
namespace LeakTest
{
class Test : QWidget
{
public byte[] Data = new byte[1000 * 1000 * 100];
public Test()
{
show();
GC.Collect(); // so measurements are more accurate
}
protected override void keyPressEvent(QKeyEvent arg__1)
{
disposeLater();
new Test();
}
[STAThread]
static void Main(string[] args)
{
QApplication.initialize(args);
new Test();
QApplication.exec();
}
}
}
ОС: Windows 7
Интересное примечание: когда я делаю "Данные"двумерный неровный массив измерений [1000 * 1000 * 100][1]
, диспетчер задач сообщает о повышении использования памяти.