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

Вниз

Как освободить память?   Найти похожие ветки 

 
Master Paleva ©   (2004-05-10 11:22) [0]

Уважаемые Мастера!
У меня резидентная программа. Мне нужно, чтобы она занимала в памяти как можно меньше места.
Заметил, что если просто свернуть окно формы, то освобождается
много памяти. В связи с этим у меня вопрос: можно ли как-нибудь програмно освободить ненужную программе память? Или програмно свернуть окно формы так, чтобы она не отображалась в виде заголовка в левом нижнем углу экрана(т.е. свернуть полностью, как это происходит при нажатии кнопки Свернуть).


 
Тимохов ©   (2004-05-10 11:25) [1]


> У меня резидентная программа

Как это?

Таким образом работает менеджер памяти дельфи - оставляет за собой память для будущих нужд.


 
Master Paleva ©   (2004-05-10 11:27) [2]

Ну не резидентная, а просто скрытая(прячется в трей). Только она должна постоянно присуствовать на моем компьютере и мне нужно, чтобы она занимала как можно меньше место. Если свернуть окно программы, место освобождается, а программа продолжает прекрасно работать.


 
Тимохов ©   (2004-05-10 11:30) [3]

Сам этого не делал, но думаю, что придется немного модифицировать работу менеджера памяти. Говорят это не сложно.
Вот ссылка по теме http://rsdn.ru/article/Delphi/memmanager.xml

Может поможет.


 
Master Paleva ©   (2004-05-10 11:32) [4]

А как свернуть программу(как я сказал выше) не подскажете? Я тогда могу просто при загрузке сворачивать невидимую форму и добьюсь такого же результата.


 
Anatoly Podgoretsky ©   (2004-05-10 11:34) [5]

А зачем те вообще форма, ты же с ней тянешь килобайт 300 как минимум.


 
Master Paleva ©   (2004-05-10 11:34) [6]

Она нужна для редактирования.


 
TUser ©   (2004-05-10 11:42) [7]

Грузи ее из dll только тогда, когда это необходимо.


 
Master Paleva ©   (2004-05-10 11:42) [8]

Я посмотрел в кладовке похожие программы(которые прячутся в трей). У них такой же недостаток. Все они занимают в памяти раз в шесть-семь больше места, чем им нужно для работы.
При запуске самой программы выделяется сразу много памяти, но дальше для работы программы эта память не нужна.

Неужели никто не знает как програмно свернуть форму?


 
Mim1 ©   (2004-05-10 11:45) [9]

Для поождержания иконки в трее тебе не нужна форма, достаточно окна windows (см. AllocateHwdn). Если же тебе требуется форма для редактирования чего либо то создвай ее не при старте приложения а когда надо.


 
Master Paleva ©   (2004-05-10 11:45) [10]

TUser ©   (10.05.04 11:42) [7]
В моем случае это неэффективно, так как программа должна работать в "процессе", т.е. она всегда необходима. Она может понадобиться пользователю в любой момент.


 
KilkennyCat ©   (2004-05-10 11:48) [11]

Может, стоит тогда разделять и властвовать?
Одна программа без формы, резидент, выполняющая Вашу программу. Другая - треешная, поддержка меню и (или) отображение процесса. Третья - с формами и прочим.


 
Master Paleva ©   (2004-05-10 11:49) [12]

Mim1 ©   (10.05.04 11:45) [9]
Но если бы я нашел способ програмно свернуть форму, тагда моя программа будет вместо 3mb занимать всего 500kb(500-1000). Это меня вполне устроит. И менять ничего не придется.


 
Master Paleva ©   (2004-05-10 11:52) [13]

KilkennyCat ©   (10.05.04 11:48) [11]
Тогда мне придется сделать сразу несколько программ? Ведь, если сделать все в одном exe-ке, то при загрузке все-равно выделяется память для всех форм.


 
Mim1 ©   (2004-05-10 11:59) [14]

[12] Master Paleva ©   (10.05.04 11:49)
А откуда такие сведения?
Свернуть showwindow + sw_minimize


 
Master Paleva ©   (2004-05-10 12:01) [15]

Mim1 ©   (10.05.04 11:59) [14]
-WindowsXP
Я кажется уже использовал этот способ, но окно полностью не сворачивалось(оставалось в виде заголовка в левом нижнем углу экрана).


 
Mim1 ©   (2004-05-10 12:03) [16]

Не, вот интересно, с чего вы взяли что программа станет занимать меньше памяти если ее свернуть?


 
Master Paleva ©   (2004-05-10 12:04) [17]

Mim1 ©   (10.05.04 12:03) [16]
Это факт. Это показывает WindowsXP.


 
Anatoly Podgoretsky ©   (2004-05-10 12:07) [18]

Master Paleva ©   (10.05.04 12:04) [17]
Это не факт, это показывается запрошеная память


 
KilkennyCat ©   (2004-05-10 12:09) [19]

[13] Master Paleva ©   (10.05.04 11:52)
Тогда мне придется сделать сразу несколько программ?


да. минимум две. Вот у меня сейчас в трее висят: KerioMail, Pc-Cillin, Apachie. И все они по такому принципу.

[16] Mim1 ©   (10.05.04 12:03)
Не, вот интересно, с чего вы взяли что программа станет занимать меньше памяти если ее свернуть?


ну как же, экранную освобождает, факт :)

[9] Mim1 ©   (10.05.04 11:45) -
согласен. создать, когда надо, дестроить, когда не надо...


 
Думкин ©   (2004-05-10 12:36) [20]

> [19] KilkennyCat ©   (10.05.04 12:09)

А все-таки. У любой 4 Гб и 2 Гб. О какой памяти речь?


 
KilkennyCat ©   (2004-05-10 13:03) [21]

[20] Думкин ©   (10.05.04 12:36)

вероятно, о DDR333


 
Игорь Шевченко ©   (2004-05-10 13:38) [22]

Ерунда это все. Программа сколько места занимала, столько и будет занимать, хоть сворачивай ее, хоть не сворачивай.

То, что показывает Task Manager - это количество страниц программы отображенных СЕЙЧАС в оперативную память. Через миллисекунды это количество может меняться. Если программа выходит на передний план, она, разумеется, будет требовать, чтобы нужные ей страницы отображались на память, а пока она неактивна, страницы могут вытесняться.

Автору - не парься.


 
Игорь Шевченко ©   (2004-05-10 13:41) [23]

Впрочем, если очень хочется усложнить жизнь, то смотри в сторону SetProcessWorkingSetSize(Ex)


 
Думкин ©   (2004-05-10 14:14) [24]

> [21] KilkennyCat ©   (10.05.04 13:03)

Сие понятно, но если нет понимания в сути - то может не стоит?


 
Master Paleva ©   (2004-05-10 14:48) [25]

Игорь Шевченко ©   (10.05.04 13:41) [23]
Это только поначалу усложняет жизнь. Потом облегчает...

Если программа выходит на передний план, она, разумеется, будет требовать, чтобы нужные ей страницы отображались на память, а пока она неактивна, страницы могут вытесняться.

А разве не лучше, если программа будет отображать меньше страниц на память? Или это не играет никакой роли?

Я нашёл в справке SetProcessWorkingSetSize. Но там не очень понятно. Может, у кого-нибудь найдется примерчик?


 
Игорь Шевченко ©   (2004-05-10 15:00) [26]


> А разве не лучше, если программа будет отображать меньше
> страниц на память? Или это не играет никакой роли?


Что есть лучше в данном случае ? Программе все равно нужны эти страницы.


> Это только поначалу усложняет жизнь. Потом облегчает...


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


 
Сергей Суровцев.   (2004-05-10 15:00) [27]

>Master Paleva ©   (10.05.04 14:48) [25]

Есть такой принцип - рациональности. Если программа нужная, то на нее и 2-3 метра не жалко, а если ненужная, то и 500Кб много. А вообще игры с памятью - вещь неблагодарная.


 
Master Paleva ©   (2004-05-10 15:07) [28]

Сергей Суровцев.   (10.05.04 15:00) [27]
Ну а если много таких нужный программ. И каждая из них весит по 3-5 метров. Тогда придется выбирать самые нужные или покупать новую память.

Я где то слышал, что все эти библиотеки(для создания форм, кнопок и т.д.) можно подгружать динамически. В таком случае exe-ник простейшего приложения будет занимать всего 15-20k. Это вообще реально?


 
Тимохов ©   (2004-05-10 15:11) [29]


> Master Paleva ©   (10.05.04 15:07) [28]

не очень понимаю, что вы паритесь.
если у вас программа висит, как вы говорите "резидентно", то скорее всего большинство страниц памяти вашего процесаа лежат в файле подкачики и реальной оперативной памяти не занимают. Они загрузятся в память, когда понадобятся.

Почему вас это так волнует? Просто так или есть достаточные основания полагать, что просто необходимо уменьшить количество памяти т.к. ваша программа плохо/медленно работает?


 
KSergey ©   (2004-05-10 15:13) [30]

Да хоть динамически, хоть как, блин! Память-то они все равно отжирать будут! +память на динамическую подгрузку. Впрочем, exe тоже динамически отображается, если что. Так что от его размера ничего не зависит, раз уж доп. библиотеки используются.

А вообще во всей ветке вам пытаются сказать одно: либо плюньте и займитесь своими задачами, либо хорошо изучите данный материал. И тогда вы сами придете к первому. Монстры - они уже изучили, потому и пришли, потому и выкладывают его вам (этот вывод). А вы все упираетесь.


 
Тимохов ©   (2004-05-10 15:16) [31]

Автору.
Другой вопрос, если вам действительно необходимо уменьшить память, занимаемую вашим процессов, а не только заставить таск манагер показывать, что памяти вы стали занимать меньше. Имхо здесь решение одно - отказаться от vcl, писать на winapi. Не помню точных величин, но простое приложение без vcl может занимать несколько десятков кил (если не ошибаюсь).


 
Master Paleva ©   (2004-05-10 15:17) [32]

Тимохов ©   (10.05.04 15:11) [29]
Просто я пишу программу для своих коллег по учёбе(и для себя, естественно, тоже). А там в некоторых кобинетах стоят очень "слабые" компьютеры(с оперативкой в 16 Mb). Там и так все тормозит.


 
Тимохов ©   (2004-05-10 15:19) [33]


> Master Paleva ©   (10.05.04 15:17) [32]


> с оперативкой в 16 Mb

Неужто на такую память windows вообще встает? :))
Не знал.
Тогда вам надо не манагер памяти мучать, а писать на winapi с полным отказом от vcl - приложения будут существенно меньше.


 
Mim1 ©   (2004-05-10 15:22) [34]

[32]

А в заголовке стоит WinXP. :)


 
Master Paleva ©   (2004-05-10 15:24) [35]

KSergey ©   (10.05.04 15:13) [30]
Я вовсе не упираюсь. Я же не спорю ни с кем. Просто я хочу "хорошо изучит данный материал". Потому что в книжках по Делфи(хороших книжках) нет ответов на те вопросы, которые я задаю.
Кроме того, я принимаю к сведению то, что мне говорят. Например, я много нового узнал от Игоря Шевченко и попробую воспользоваться советом KilkennyCat ©   (10.05.04 11:48) [11] .


 
Тимохов ©   (2004-05-10 15:24) [36]


> Mim1 ©   (10.05.04 15:22) [34]

:)))))

Автору.

А что правда на такую оператвку windows встает?
У меня дома 128 и то тормозит.
На работе гиг - вот это дело.


 
Master Paleva ©   (2004-05-10 15:24) [37]

Mim1 ©   (10.05.04 15:22) [34]
Это я пишу на WinXP.


 
Master Paleva ©   (2004-05-10 15:26) [38]

Тимохов ©   (10.05.04 15:24) [36]
Win95 "встает". Но держится на "ногах" плохо.


 
Тимохов ©   (2004-05-10 15:26) [39]


> Master Paleva ©   (10.05.04 15:24) [35]

если вы хотите разобраться, то:
1. почитайте ссылку, которую я дал выше про манагер памяти дельфи
2. почитайте Рихтера - раздел "Работа с памятью"


 
Master Paleva ©   (2004-05-10 15:29) [40]

Тимохов ©   (10.05.04 15:26) [39]
Спасибо, почитаю.


 
Erik ©   (2004-05-10 16:59) [41]

А почему никто неупомянул библиотеку KOL и ее зеркальные классы для визуального проектирования?! Как а понимаю человеку поучится хочется, так для таких случиев KOL идеальна(для некоторых дугих тоже).
 Кроме того мне показалось, что автор несовсем понимает, что такое динамическое создание формы. "Она может понадобиться пользователю в любой момент" Создание формы занимает ничтожное время для пользоватедя время, поэтому советую поробовать этот вариант. А необходимые данные джержать в отдельной структуре передавая форме. Это плохой стиль запихивать все в форму.
P.S.
 А до API тебе еще вырасти надо.


 
evvcom ©   (2004-05-10 19:34) [42]

А лучше и вовсе не париться. Не справляется машина - долбить по башке начальству, что не может нормально работать не только моя программа, но даже ОС Win95 - WinXP. Это хорший довод в пользу финансирования.
А уж если делать совсем нечего, то пишите сразу на ассемблере и полностью. Геморрой обеспечен.



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

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

Наверх




Память: 0.56 MB
Время: 0.033 c
8-1078660834
S_FreemAn*[wiZard]
2004-03-07 15:00
2004.05.23
Компонент Delphi


14-1083317734
}|{yk
2004-04-30 13:35
2004.05.23
Как вам такая новость?


4-1080930218
xamlo
2004-04-02 22:23
2004.05.23
Програмное нажатие мыши


7-1081922752
Евгыш
2004-04-14 10:05
2004.05.23
AsyncPro, получение блока данных


8-1078845098
incm
2004-03-09 18:11
2004.05.23
Как рисовать на TIcon





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