Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 187
от 22.07.2005, 18:20

Администратор:Калашников О.А.
В рассылке:Подписчиков: 225, Экспертов: 31
В номере:Вопросов: 2, Ответов: 3


Вопрос № 23624: 1)Почему размер программы (загруженной в память) меняется? ПРимер: При начале работы = 2256К, после сворачивания и разворачивания равен 886К? 2) Почему при run-time создании и удалении компонентов размер(в памяти) программы увеличивается? Вед...
Вопрос № 23627: Здравствуйте, эксперты. Что нужно добавить в нижеприведенный код, чтобы после запуска форма становилась активной (была в фокусе) ?...

Вопрос № 23.624
1)Почему размер программы (загруженной в память) меняется?
ПРимер: При начале работы = 2256К, после сворачивания и разворачивания равен 886К?
2) Почему при run-time создании и удалении компонентов размер(в памяти) программы увеличивается? Ведь созданные компоненты были удалены!(с помощью free).
Отправлен: 17.07.2005, 13:13
Вопрос задал: Hadan (статус: Посетитель)
Всего ответов отправлено: 1

Отвечает: sir henry
Здравствуйте, Hadan!
1) Я скомпилировал окно с одной кнопкой для проверки того, что Вы пишите и назвал myprog.exe.
Вот что пишет нам по этому поводу программа TaskInfo.
- Сразу после запуска программы:
-------------------------------------------------
Модуль Занимает в памяти
-------------------------------------------------
myprog.exe 401 408
ntdll.dll 184 320
kernel32.dll 180 224
user32.dll 167 936
GDI32.dll 73 728
ADVAPI32.dll 65 536
RPCRT4.dll 45 056
oleaut32.dll 53 248
MSVCRT.DLL 147 456
OLE32.DLL 200 704
version.dll 20 480
comctl32.dll 57 344
uxtheme.dll 81 920
MSCTF.dll 196 608
Все это танет за собой Ваша программа после запуска.
- Теперь сворачиваем окно программы:
myprog.exe 147 456
ntdll.dll 32 768
kernel32.dll 32 768
user32.dll 57 344
GDI32.dll 12 288
ADVAPI32.dll 0
RPCRT4.dll 0
oleaut32.dll 0
MSVCRT.DLL 0
OLE32.DLL 0
version.dll 0
comctl32.dll 0
uxtheme.dll 40 960
MSCTF.dll 28 672
Как видите, ряд библиотек перестало занимать память, т.к. в свернутом состоянии они не используются. Да и прога наша изрядно похудела. :)
- Теперь обратно разворачиваем окно программы:
myprog.exe 184 320
ntdll.dll 57 344
kernel32.dll 53 248
user32.dll 94 208
GDI32.dll 40 960
ADVAPI32.dll 0
RPCRT4.dll 0
oleaut32.dll 0
MSVCRT.DLL 24 576
OLE32.DLL 0
version.dll 0
comctl32.dll 0
uxtheme.dll 57 344
MSCTF.dll 163 840
Хи-хи. Программа поправилась, но не до первоначального размера. Отключились ненужные функции из DLL'ек? Вполне возможно. Многие доп библиотеки остались по нулям, только подключилась опять msvcrt, но с этим ничего не поделаешь - она нам картинки (ну типа кнопки и прочая лабуда) помогает рисовать.
Какой-же вывод? Использование VCL в программах - верный путь к ожирению, т.к. в них заложено масса функций и т.п. вещей которые у Вас не используются, но подключаются по умолчанию просто потому что они есть в VCL.
2) А какие компоненты Вы создаете? Вполне возможно что они тянут за собой создание каких-то сопутствующих компонент и структур в памяти, а потом за собой не убирают. Печально, но факт. Микрософт поклялось, что в .NET это дело поправлено, т.е. все что Вы создали будет удаляться.
Попробуйте создать таймер, а потом удалить его. Только не TTimer, а тот который создается средствами WinAPI:
const
id_timer: 100; {Идентификатор таймера в системе}
Begin
SetTimer(Form1.Handle, id_timer, 200, nil); {Включаем. Хозяин таймера - Form1, период - 200 мсек}
KillTimer(Form1.Handle, id_timer): {Убиваем таймер}
:)
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 17.07.2005, 15:25
Оценка за ответ: 5
Комментарий оценки:
Спасибо! Ваш ответ очень помог мне!
Весьма признателен вам за это.


Вопрос № 23.627
Здравствуйте, эксперты.
Что нужно добавить в нижеприведенный код, чтобы после запуска форма становилась активной (была в фокусе) ?

Приложение:

Отправлен: 17.07.2005, 15:20
Вопрос задал: Brutaller (статус: Посетитель)
Всего ответов отправлено: 2

Отвечает: sir henry
Здравствуйте, Brutaller!
Если это у Вас единственная форма, то делать ничего не надо, она и так будет активна. Видимо Вы что-то недоговариваете или имели в виду что-то другое.
Пожалуйста, опишите проблему подробнее.
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 17.07.2005, 15:29

Отвечает: Jadd
Здравствуйте, Brutaller!
Попробуй функцию WinAPI SetForegroundWindow. Описание в MSDN.
---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Студент)
Отправлен: 18.07.2005, 11:44


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Яндекс


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.delphiplus
Отписаться
Вспомнить пароль

В избранное