Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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.041 c
1-1083822876
Girder
2004-05-06 09:54
2004.05.23
Проблемма с отладчиком в Delphi 7


14-1083398784
Вопрошающий
2004-05-01 12:06
2004.05.23
Новый монитор


1-1084336873
Ormada
2004-05-12 08:41
2004.05.23
Создание компонента типа DropDownBox


3-1083138302
MaD
2004-04-28 11:45
2004.05.23
Замена значений полей по условию при SQL-выборке


3-1083146032
samovar inc.
2004-04-28 13:53
2004.05.23
значение вставить в поле базы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский