Форум: "Потрепаться";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];
ВнизWindows и Память Найти похожие ветки
← →
Style © (2004-04-28 16:59) [0]Куда уходит память..
Казалось бы вызваю один MessageBox и сразу прибавляется 1мег памяти. Ладна предположим загрузилась библиотека. А потом начинает прибавляться по 4к и размер используемой памяти постепенно растет?
Task Manager пишет что у данного процесса 22 GDI объекта - это кто и как их посмотреть?
Далее начинает добавляться по два GDI объекта с каждым вызовом MessageBox и освобождаться по мере закрытия диалогового окна - как я понял это кнопка и само окно. Но память все равно растет.
program MemMsg;
const
VK_F10 = 121;
VK_F12 = 123;
STATUS_TIMEOUT = $00000102;
procedure Sleep(dwMilliseconds: integer); stdcall; external "kernel32.dll";
function GetAsyncKeyState(vKey: Integer): integer; stdcall; external "user32.dll";
function MessageBoxA(hWnd: integer; lpText, lpCaption: PChar; uType: integer): Integer; stdcall; external "user32.dll";
begin
while true do
begin
if(GetAsyncKeyState(VK_F12) > 0) then Break;
if(GetAsyncKeyState(VK_F10) > 0) then MessageBoxA(0,pchar("Testing"), pchar("Message"), $00001000);
Sleep(STATUS_TIMEOUT);
end;
end.
Проверял в NT4.0 SP6
и XP
в XP памяти отжирается на порядок больше.
И всеже странно, блин если вспомнить ZXSpectrum, да там всего было 48к памяти, а такие вещи делали. А сейчас простенькая програмка HelloWorld отъедает больше мега оперативки :(
Неужели все так плохо.
← →
Digitman © (2004-04-28 17:13) [1]
> Неужели все так плохо
еще как плохо !
впору возвращаться ко временам ЗетЭкс Спектрума
← →
Игорь Шевченко © (2004-04-28 17:41) [2]Style © (28.04.04 16:59)
http://www.sysinternals.com Process Explorer тебе поможет
← →
Style © (2004-04-28 19:08) [3]
> http://www.sysinternals.com Process Explorer тебе поможет
Спасибо. Очень полезная программа...
> еще как плохо !
> впору возвращаться ко временам ЗетЭкс Спектрума
я думаю этого не стоит делать. :)
начальник просто мне сказал, что за ботва давай ищи у себя утечку памяти (а там коду то, показ сообщения просто -
http://delphimaster.net/view/14-1083131335/ ), вот я в программе MessageBox отключил, память перестало отжирать...
И мне стало интересно узнать откуда ноги растут :(
← →
nikkie © (2004-04-28 23:59) [4]message box - это окошко.
появилось окошко - стали посылаться сообщения.
а сообщения ты из очереди не выбираешь.
вот и утечка.
а GDI объекты вероятно должны были удаляться
в ответ на сообщение какое-нибудь.
а сообщения ты не диспатчишь.
по-моему так.
читай книжку по АПИ.
как должен выглядеть код стандартный.
а еще лучше - пиши проги консольные.
и будешь счастлив ты сам и твой юзер.
← →
Gero © (2004-04-29 00:04) [5]
> nikkie © (28.04.04 23:59)
Белый стих :)
← →
Rouse_ © (2004-04-29 00:19) [6]> message box - это окошко.
> появилось окошко - стали посылаться сообщения.
> а сообщения ты из очереди не выбираешь.
> вот и утечка.
Это как же ты собрался при модальном окне то (тем более не собственном) сообщения выбирать из очереди? Точнее даже не так. При чем тут вообще это?
← →
DVM © (2004-04-29 00:30) [7]
> начальник просто мне сказал, что за ботва давай ищи у себя
> утечку памяти
MemProof поможет найти. И строку в коде покажет.
← →
nikkie © (2004-04-29 00:34) [8]>Gero
начало случайно сложилось, а потом я старался :)
>Rouse
может и ни причем. но у меня других объяснений нет.
я немного глюканул - мне показалось, что в теме сказано будто GDI объекты утекают. но, имхо, вполне вероятное объяснение, что утечка памяти из-за того, что какие-то сообщения не дошли до адресата. стоит попробовать написать цикл выборки сообщений и сравнить.
← →
DVM © (2004-04-29 00:44) [9]
> Далее начинает добавляться по два GDI объекта с каждым вызовом
> MessageBox и освобождаться по мере закрытия диалогового
> окна - как я понял это кнопка и само окно.
Скорее кисть окна и иконка окна.
> Но память все равно растет.
Где показания смотрите?
← →
Игорь Шевченко © (2004-04-29 01:10) [10]Запустил я программу.
Никакая память при MessageBox не увеличивается с каждым диалоговым окном. Первый раз при вызове MessageBox увеличивается размер Working Set, что, в приниципе, разумно, так как в него попадают страницы User32.dll, и увеличивается память, на что тоже имеется разумное объяснение, так как первый вызов оконной функции связан с выделением памяти приложению до конца его работы под нужды подсистемы управления окнами. Без MessageBox программа использует 5 GDI handles и 1 user handle, что вполне совпадает с потребностями системы.
Под Windows XP, вероятно, количество GDI Handles увеличивается за счет включенных тем.
← →
Style © (2004-04-29 09:43) [11]
> Игорь Шевченко © (29.04.04 01:10) [10]
Только что проверил у себя на компе еще раз
WinNT 4.0 SP6 -
O-открылся MessageBox, C-закрылся.
Смотрю в Window NT Task Manager
Запустил программу - 1084k
O-1232k C-1240K
O-1244K C-1244K
O-1244K C-1244K
... и так раз 30
O-1244K C-1252K
.... еще через какое то время
O-1268K
C-1272K
Ну почему так?
VM-Size после первого вызова не менялся.
---------------------------------
А в программе которая принимает сообщения
http://www.hch.ru/nmkclnt.txt
по сокету и выводит MessageBox в отдельном потоке, в WinXP отъедается по 20 килобайт за окно, а при закрытии диалога и нити(потока) - остаются хвосты.. Сейчас придет начальник, я еще раз проверю и запишу результаты.
← →
DVM © (2004-04-29 10:35) [12]
> Смотрю в Window NT Task Manager
Да в нем непонятно что отображается. В смысле количество памяти.
Не совсем правильное оно ИМХО. Особенно для программ на Delphi.
← →
Игорь Шевченко © (2004-04-29 10:43) [13]
> Да в нем непонятно что отображается. В смысле количество
> памяти.
В нем отображается размер рабочего набора процесса (все страницы процесса, находящиеся в оперативной памяти в данный момент).
Style © (29.04.04 09:43)
Что показывает Process Explorer, если два раза щелкнуть мышью на процессе в дереве и открыть закладку Performance ? Ее можно оставить открытой, она сама обновляться будет.
← →
Style © (2004-04-29 10:58) [14]
> Что показывает Process Explorer, если два раза щелкнуть
> мышью на процессе в дереве и открыть закладку Performance
> ? Ее можно оставить открытой, она сама обновляться будет.
Working set - растет
уже - 1384K
← →
Игорь Шевченко © (2004-04-29 11:03) [15]Style © (29.04.04 10:58)
Там еще есть такая фраза Private Bytes, она изменяется ?
То, что растет Working Set еще ничего не значит, просто страницы подкачиваются в память.
← →
Style © (2004-04-29 11:52) [16]
> Там еще есть такая фраза Private Bytes, она изменяется ?
нет..
> То, что растет Working Set еще ничего не значит, просто
> страницы подкачиваются в память.
а чего хоть они подкачиваются :) я же выполняю одно и тоже действие.
← →
Style © (2004-04-29 11:53) [17]
> Там еще есть такая фраза Private Bytes, она изменяется ?
Хотя вырасло на 4K было
324 стало 328.. за все это время.
← →
Игорь Шевченко © (2004-04-29 12:00) [18]
> а чего хоть они подкачиваются :) я же выполняю одно и тоже
> действие
Система стремится минимизировать количество страничных отказов, памяти много, вот она страницы и не выгружает.
> Хотя вырасло на 4K было
> 324 стало 328.. за все это время.
Постоянный рост Private Bytes свидетельствует об утечке памяти
← →
Style © (2004-04-29 12:24) [19]
> Система стремится минимизировать количество страничных отказов,
> памяти много, вот она страницы и не выгружает.
>
> Постоянный рост Private Bytes свидетельствует об утечке
> памяти
Спасибо. А где бы про это дело почитать?
← →
Игорь Шевченко © (2004-04-29 12:37) [20]Style © (29.04.04 12:24)
> А где бы про это дело почитать?
А это не очевидно ?
Написано в книжке Соломона и Руссиновича: "Внутреннее устройство Windows 2000"
← →
Style © (2004-04-29 12:44) [21]Ну рост значит явно не постоянен.
← →
Nous Mellon © (2004-04-29 12:46) [22]
> А это не очевидно ?
>
> Написано в книжке Соломона и Руссиновича: "Внутреннее устройство
> Windows 2000"
Вчера купил сию книгу. Просто обалденная вещь. Даже 500р не пожалел уж очень хотелось почитать. Вот только непонятно кто из них супер-мега-хакер.
Я сначала подумал что Соломон(там вроде так и написано). Но Соломон при написании книги имел доступ к исходникам, а Руссинович не имел.. Странная политика Мелкомягких - давать доступ к исходникам известному хакеру...
В общем в этом вопросе я не разобрался.. да это и неважно.. главное что книжка замечательная.. :)
В совокупности с Рихтером это две мои настольные книги.
Еще правда Кэнту лежит но то по Делфи.
← →
Игорь Шевченко © (2004-04-29 12:59) [23]
> Вот только непонятно кто из них супер-мега-хакер.
Читать предисловие надо внимательно, там все-все написано. :)
← →
Nous Mellon © (2004-04-29 13:05) [24]
> Читать предисловие надо внимательно, там все-все написано.
> :)
Может у нас издания разные? У меня третье - могу процитировать строки из предисловия. То есть все было бы понятно если бы не положение с доступом к исходникам
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.04 c