Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как уменьшить количество ОЗУ занимаемой программой [D6, Win2k, WinXP]


Страницы:   1 2

Дубинин Алексей ©   (2004-04-07 23:09:00) 

Программа во время работы может занимать оперативной памяти от 4 до 10 Мб. Это много, для чаще всего работающей в фоне программы. Подскажите как можно время от времени уменьшать ее.
Заранее спасибо.


Users   (2004-04-19 15:47:00) [1]

2 Zot

Большое спасибо! Проверил код работает, нужно только учесть что функция не работает на Windows 9X.

Замерял на своей программе, написана на API:

До 2977 кб, после использования функции 2232 кб = 745 кб выигрыш. Не плохо!


KSergey   (2004-04-18 11:59:00) [2]

Вероятно, еще пользователей удасться убедить сравнением смет разработки ПО с данной функциональностью на Delphi на какой-либо другой среде (возможно на дельфи, но без использования VCL)


Дубинин Алексей   (2004-04-12 22:16:00) [3]

Всем спасибо...действительно моя душа успокоилась. На самом деле так и думал...читал об этом. Короче на все подобные вопросы так и буду отвечать как сказал Игорь Шевченко.


Владислав   (2004-04-12 07:08:00) [4]

> Игорь Шевченко ©   (10.04.04 21:23) [27]

Я то это понимаю, но им это вряд ли объяснишь.

> Anatoly Podgoretsky ©   (11.04.04 12:44) [28]

Ага. Это мои проблемы :)


Anatoly Podgoretsky   (2004-04-11 12:44:00) [5]

Резюме:
Так что пусть пользователи не беспокоятся, это не их проблема.


Игорь Шевченко   (2004-04-10 21:23:00) [6]


> Смех смехом, но... наши пользователи (не все, конечно) не
> раз задавали вопросы типа "почему ваша программа занимает
> столько памяти?".


Потому что использует много обращений к DLL, например, к OLE-библиотекам, которые могут и не использоваться.
Task Manager показывает как память, занимаемую программой, так и память, занимаемую библиотеками. При этом память, занимаемая библиотеками учитывается для каждого процесса, хотя на самом деле в памяти они присуствуют в единственном экземпляре. Так что пусть пользователи не беспокоятся, это не их проблема.


Владислав   (2004-04-10 11:21:00) [7]

> Zot   (10.04.04 10:54) [25]

Согласен, тоже нефигово.


Zot   (2004-04-10 10:54:00) [8]

ну по крайней мере пользователи других ОС будут довольны что прога будет обычно жрать порядка 300К-2000К


Владислав   (2004-04-10 10:50:00) [9]

> Zot   (10.04.04 10:45) [23]

Потому и печаль... часть пользователей сидят на 95. Хотя... это не моя печаль... это их проблемы...


Zot   (2004-04-10 10:45:00) [10]

SetProcessWorkingSetSize работает в 98 и Ме кроме 95
так что с 95 не повезло


Владислав   (2004-04-10 10:38:00) [11]

> Zot   (10.04.04 10:35) [21]

Это не работает в 95, 98 и ME. Как быть с этими ОСями?


Zot   (2004-04-10 10:35:00) [12]

Все очень просто когда программа переходит в фоновый режим винда вызывает функцию

SetProcessWorkingSetSize(                                    //our process PID
                         OpenProcess(PROCESS_SET_QUOTA,false,xxxProcessPID),
                         $ffffffff,
                         $ffffffff
                        );

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


Владислав   (2004-04-10 10:29:00) [13]

Смех смехом, но... наши пользователи (не все, конечно) не раз задавали вопросы типа "почему ваша программа занимает столько памяти?". Прога написана на Delphi 6. В памяти (в Task Manager) занимает 6 - 8 мегабайт.
Иные программы в том же Task Manager отображаются с гораздо меньшим потреблением памяти. И как им это удается?.. Может кто в курсе? Я боролся с этим минимизируя главное окно. Может есть более интерессные решения?


Sirgfine   (2004-04-09 23:21:00) [14]

Существует только один способ узнать сколько именно кушает программу: взять какой-нибудь редактор,просомтрщик, менеджер памяти (На худой конец и оптимизатор типа FreeMem). Он покажет сколько кушает программа, а сколько библиотеки, или хотя-бы даст тебе возможность посчитать это самому (сложи суммы длин блоков).


Anatoly Podgoretsky   (2004-04-09 22:48:00) [15]

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


Biryk   (2004-04-09 21:24:00) [16]

Ti poprobuy napisat servis (demona)kotoriy vobshe ne imeit okon (vse biblioteki kotorie dlya roboti s oknami krome Windows otkluchi...). Potom spomoshu WinApi sozdayosh okno (bez knopok i podobnoy herni...), v kotoroe ustanavluesh obrabotchi svoey komandi. Daniy demon vipolnyaet te operacii sho tebe nado. ++ Pishes programu kotoruy budet zagruzhat tvoy demon. Programa dolznha prosto mogti rabotat cherez komandi s demonom (sendMessage ...). ==> Programa mozhet ispolzovat vse navoroti, i posli vnesenie neobhotimih nastoek dlya demona vigruzhaetca.
I esho Demona zdelay Consolnim...


ламер   (2004-04-09 16:11:00) [17]

> _Sh_   (09.04.04 02:37) [14]
никто. т.к. твой EXE-шник в любой момент времени может полностью или частично быть выгружен из ОЗУ. хотя бы в своп-файл.


sniknik   (2004-04-09 08:22:00) [18]

никогда не интересовался, но счас (после описания [11]) проверил несколько своих программ, они все обладают этим свойством хотя специально ничего для этого не делал...
(сворачивание уменьшеет показываемый размер памяти в таскменеджере)

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


_Sh_   (2004-04-09 02:37:00) [19]

А кто тогда может сказать, сколько RAM жрёт именно мой EXE-шник?


Sirgfine   (2004-04-09 00:31:00) [20]

TaskMeneger показывает не память, занимаемую программой, а память занимаемую программой + всеми библиотеками, которые она использует.
Так-что скорее всего твоя программка не так уж и много кушает, а библиотеки динамические и следовательно загружены один раз для всей системы.
Чтобы решить эту проблему (если она так важна) попробуй неиспользовать какие-нибудь внешние функции (если это возможно) или просто скажи пользователю, чтобы он NT(2k,XP) поставил и памяти прибавил.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо