Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];

Вниз

Свернуть-Развернуть= -2МБ   Найти похожие ветки 

 
Sphinx ©   (2004-03-14 11:03) [0]

Повозился я тут немного со своей прогой, по поводу потребления последней системных ресурсов. Это критично, так как пытаюсь сделать "шкурный" интерфейс. Пока что на основе bmp и обрезаю по региону. И столкнулся с таким явлением:

Запускаю программу, только MainForm и ни чего более (остальные во-первых не "шкурные", а во-вторых в свойствах проекта они перенесены из автосоздаваемых, то есть грузятся динамически) при этом прога занимает в памяти 3,5 МБ (примерно 8 картинок, одна большая - фон, а остальные маленькие - кнопки), работаю - менюшки вызываю, окна открываю, как результат получаю рост памяти примерно до 3,9 МБ (пока что думаю не критично, и вроде утечек нет), далее сворачиваю программу, либо кликнув по окну в панели задач, либо на кнопке за которой закреплено Application.Minimaze.
Свернутое приложение весит ~500 КБ
Разворачиваю окно и его размер в памяти становиться 1 МБ (?), работаю - менюшки вызываю, окна открываю; увеличение до 1,2 МБ, и все!!!

Вопрос, как это так получается (размер приложения в файле подкачки не меняется более чем на 100 КБ), и за счет чего можно достичь тогоже результата не сворачивая-востанавливая окно?

З.Ы. Показания снимались при помощи "Диспетчера задач".


 
Defunct ©   (2004-03-14 11:24) [1]

Почитайте смежную ветку

http://delphimaster.net/view/1-1079178882/
Юрий Зотов ©   (14.03.04 09:20) [20]
Объясняет это спецификой VMM


 
Sphinx ©   (2004-03-14 11:36) [2]

> Defunct ©   (14.03.04 11:24) [1]

Читал, но там немного другая специфика. Мне интересно, можно ли применить эту специфику для УМЕНЬШЕНИЯ ПОТРЕБЛЕНИЯ ПАМЯТИ, ведь эффект имеет место, значит его можно как-то использовать.

В onShow выполнять Application.Minimaze & Application.Maximaze согласитесь маразм, но маразм имеющий эффект.


 
Anatoly Podgoretsky ©   (2004-03-14 11:53) [3]

Да ты не верь этим показаниям. Это резервированая память, а не реально занятая и тогда какая разница сколько резервировано, кроме того программы в Виндоус использую не реальную память, а виртуальную.


 
Sphinx ©   (2004-03-14 12:04) [4]

> Anatoly Podgoretsky ©   (14.03.04 11:53) [3]

То есть получается, что Диспетчер отображает не сколько программа потребляет, а сколько ей выделил Виндоуз? Тогда при сворачивании этот резерв должен сокращаться, а при востановлении получаем более-менее точный размер занимаемой программой памяти потому что резерва почти нет, т.к. Виндоуз знает сколько памяти нужно приложению реально???

Я правильно Вас понял?


 
Юрий Зотов ©   (2004-03-14 12:08) [5]

> Sphinx

Несколько упрощенно, картина выглядит примерно так.

Когда приложению требуется память, оно запрашивает ее у системы - но не непосредственно, а через свой собственный менеджер памяти (МП), который по умолчанию линкуется к программе. Собственно, ВНУТРИ программы распределением памяти заведует именно он. И именно ОН решает, когда и сколько запросить памяти у СИСТЕМЫ и когда и сколько памяти ей вернуть.

Так вот, стандартный борландовский МП не спешит возвращать память системе. Даже когда программа вызывает Dispose или FreeMem, то это еще не значит, что данный блок немедленно будет системе возвращен. Вместо этого МП помечает его, как свободный и при следующем запросе программы на память может отдать именно его, не запрашивая у системы память каждый раз. То есть, получается как бы некое подобие "кэширования" полученной от системы памяти. Чтобы избежать слишком частых запросов памяти у системы, МП все время старается держать некий "запас" памяти и только когда этот запас становится слишком большим - вот тогда он возвращает системе "излишки". Именно это мы и наблюдаем при сворачивании программы.

Сделано это для ускорения работы и бороться с этим, IMHO, не нужно. Просто внимательно отследите, чтобы в самой программе не было ДЕЙСТВИТЕЛЬНЫХ утечек памяти. И чтобы ставшие уже ненужными объекты и прочие ресурсы немедленно освобождались. Все остальное доверьте МП, он разберется. Либо нужно использовать другой, не борландовский МП (только сначала решите - а оно надо? лично я бы, пожалуй, не стал).

А Task Manager - это, пожалуй, самое неподходящее средство измерения. Существуют специализированные инструменты - MemProof и пр. Используйте их, они покажут реальную картину.


 
Rouse_ ©   (2004-03-14 12:15) [6]

> [5] Юрий Зотов ©   (14.03.04 12:08)
Кстати, Юрий, про MemProf как раз вопросик. Он постоянно показывает наличие утечки в 4 кб даже в пустом проекте. Сейчас проверить нет возможности, но если не ошибаюсь указывает при этом в район Classes.pas
Не в курсе - что это за экивок?



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.031 c
6-1074606738
LexaTyukha
2004-01-20 16:52
2004.04.04
Как отловить сообщение приходящее от net send?


6-1074776709
Axis_of_Evil
2004-01-22 16:05
2004.04.04
пакеты


3-1078215389
denmin
2004-03-02 11:16
2004.04.04
Проблема с ADOTable


14-1077511275
Тумар
2004-02-23 07:41
2004.04.04
Как вас поздравили с 23 февраля?


3-1078676634
Volodya_
2004-03-07 19:23
2004.04.04
Filter





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский