Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.23;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.023 c
1-1083830690
Alexey1
2004-05-06 12:04
2004.05.23
"Стандартный звук" из звуковой схемы Windows,как от него избавить


1-1083928124
Tomkat
2004-05-07 15:08
2004.05.23
Модульное приложение в Delphi


7-1081355785
bob5
2004-04-07 20:36
2004.05.23
Установка принтера по умолчанию


14-1083253487
афвуд
2004-04-29 19:44
2004.05.23
Не подскажет кто исходники(C, Pasca) какой-нибудь скриптогонялки.


1-1083848935
Talle
2004-05-06 17:08
2004.05.23
Компонент TXMLDocument