Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Уменьшение занимаемой оперативной памяти


Автор: Klose 9.8.2006, 15:36
Наверное такая тема была, но не смог найти.
Можно ли как-нибудь сделать, чтобы программа занимала меньше оперативки?А то сама весит 25кб, а
(посмотрел в Диспетчере задач) занимает оперативки 2500 кб. 
Некрасиов так=)

Автор: Snowy 9.8.2006, 15:40
А ты её сверни и разверни smile
Не всегда можно верить тому, что показывает диспетчер.

Автор: Alexeis 9.8.2006, 15:42
Практически не возможно, минимальная програма занимает у меня 1.7 Мб Единственый вариант писать прогу без окон вообще smile (от этого мало пользы),  либо консоль, хотя cmd.exe, будет пожирать не меньше памяти.

Автор: Rennigth 9.8.2006, 15:45
Klose, а что программа делает-то? 
ГЫ... размер exe практически не влияет сколько она будет кушать памяти smile

Автор: Alexeis 9.8.2006, 15:46
Цитата(Snowy @  9.8.2006,  15:40 Найти цитируемый пост)
А ты её сверни и разверни

После нескольких своротов и разворотов уже 404кб, все остальное в подкачке.

Автор: Teran 9.8.2006, 15:54
Цитата(Klose @  9.8.2006,  15:36 Найти цитируемый пост)
Можно ли как-нибудь сделать, чтобы программа занимала меньше оперативки?

повставляй у себя в программе вот эту строку:
Код

SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF);

Автор: Klose 9.8.2006, 16:09
Цитата

Klose, а что программа делает-то? 


В том-то и дело, что почти что нечего. Просто "переводит" с одного текстового поля, в другое.
Воть.

А что, правда когда сворачиваешь-разварачиваешь, уменьшаеться. Круть, я и незнал.

Цитата

повставляй у себя в программе вот эту строку:
код Pascal/Delphi
    
1:SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF);


Попробую.

Автор: Alexeis 9.8.2006, 16:11
Теперь я узнал сколько же всего виртуальной памяти жрет winmin -> 2.132Мб

Автор: dumb 9.8.2006, 16:14
начальное значение размера рабочего набора (working set) задается системой равным дефолтному, которое зависит от версии(проф,сервер,итд), установленной памяти итд.

Цитата(alexeis1 @  9.8.2006,  15:46 Найти цитируемый пост)
После нескольких своротов и разворотов уже 404кб, все остальное в подкачке.

"сворот" инициирует усечение рабочего набора. если рабочий набор был больше, чем требовалось, свопить ничего и не будет. smile

Код
SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF);

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

Автор: Alexeis 9.8.2006, 16:17
Цитата(dumb @  9.8.2006,  16:14 Найти цитируемый пост)
как потом mm должна будет заново увеличивать ws и подгружать процесс из свопа.

Значит стоит сразу ей установить 404 кб?

Автор: Klose 9.8.2006, 16:20
 
Цитата

1:
    
SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF);


Помогает. Щас стало 1 300 кб.

Автор: drkot 9.8.2006, 16:24
Цитата(Snowy @  9.8.2006,  15:40 Найти цитируемый пост)
Не всегда можно верить тому, что показывает диспетчер.

Цитата(alexeis1 @  9.8.2006,  15:42 Найти цитируемый пост)
минимальная програма занимает у меня 1.7 Мб

Цитата(Rennigth @  9.8.2006,  15:45 Найти цитируемый пост)
размер exe практически не влияет сколько она будет кушать памяти

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

А в винде как?

ЗЫЖ диспечер конечно надиратель еще тот, но таскинфо зачастую несильно отличается в оценке занятой памяти.

Добавлено @ 16:29 
Цитата(Klose @  9.8.2006,  16:20 Найти цитируемый пост)
Помогает. Щас стало 1 300 кб.

мнимая помощь имхо

Автор: Romikgy 9.8.2006, 16:33
на вин апи пиши

Автор: Klose 9.8.2006, 16:34
Так на нем и пишу.

Автор: Romikgy 9.8.2006, 16:37
чет мало верится, хотя
Цитата(Klose @  9.8.2006,  14:36 Найти цитируемый пост)
А то сама весит 25кб

тогда могет быть , только значит коряво юзаешь если 2 метра, имхо

Автор: drkot 9.8.2006, 16:42
простейший сервис (пустышка) (написаный полностью на API ) занимает 1500кб. А половина системных сервисов занимают <=1000кб (так они еще и делают чето и память выделяют)
В чем правда брат?


сам ехе-шник весит 17кб (без сжатий и пр.)

Автор: Klose 9.8.2006, 17:17
Цитата

тогда могет быть , только значит коряво юзаешь если 2 метра, имхо 


Вот это может быть=)

Автор: dumb 9.8.2006, 17:34
тут важно понимать, что размер рабочего набора процесса - это не размер образа + размер выделенной процессом памяти. в него также входят разделяемые страницы, коих, в зависимости от используемых api-функций может быть довольно много. опять же, далеко не весь образ может сразу прогрузиться в рабочий набор. манипулирование рабочим набором происходит исходя из кучи параметров: страничные ошибки потоков, свободная память, времени и активности работы приложения итд итп.

в общем, мое мнение - не стоит "руками" пытаться что-то сделать. все эти фичи типа "минимальный размер занимаемой памяти" относятся больше к маркетингу. дос умер. smile

сейчас буду посылать. smile
http://old.osp.ru/win2000/2004/01/038.htm
http://cs.mipt.ru/docs/courses/osstud/10/ch10.htm
http://www.unix.org.ua/unix2/glava_20.htm

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)