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

Вниз

Как уменьшить количество ОЗУ занимаемой программой   Найти похожие ветки 

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

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


 
Anatoly Podgoretsky ©   (2004-04-07 23:14) [1]

Это не много.
А вопрос про подземный стукю


 
Diamond Cat ©   (2004-04-07 23:22) [2]

если не ошибаюсь SetThreadPriority


 
sniknik ©   (2004-04-08 08:38) [3]

есть такая программа (не знаю как называется, но смысл в том что постоянно отсвечивает в трее и "чистит" память по требованию или при длительном простое)... вот, кое кто пользуется... но вот знакомый пользовался, и начались проблемы с компом (возможно вовсе не связанные с этой програмой), комп на гарантии он недолго думая отвез (решил что апаратные проблемы) а в центре увидели эту программу и... отказали в обслуживании, просто завернули даже не разбираясь (у них есть список вредных программ с которыми они дела не имеют, эта там на втором месте).
почему знаю, он после ко мне обратился, ну типа найти глючную деталь и им в нос ткнуть, обиженный был. разбиратся я тоже не стал просто переставил винду с нуля (начал с того что переразбил диск, (сказал так надо) чтобы ни одна старая программа не выжила (обьяснять чегото обиженому... ломы)), глюки исчезли. и какоето время их не было, но после он снова нашол эту программу...(и несколько других "утилит")... интересно но обьяснить связь установка программы-глюк мне не удалось. но еще раз я к нему для профилактики компа не поехал (так по телуфону обсудим, он мне пожалуется на дядю била, и все. а смысл, если рекомендаций не выполняет живет свои умом, ну и ладно). одно из доказательств надежности проги - "я ей анынстал сделал, глюки не исчезли", при чем (по его же словам) он даже не перегрузился для проверки.
(одно из проявлений глюков, самое редкое и самое наглядное, откудато из недр системы окошко всплавает с AV память не может быть read, и не дает работать, нажатие ok тут же приводит к новому подобному окошку)

уфф. ;о) чего то я разошолся.


 
Imageman   (2004-04-08 09:25) [4]

Если программа почти все время висит в фоне, то можно попытаться сделать демона с минимальной функциональностью. Сделать его, например, при помощи KOL.

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


 
Anatoly Podgoretsky ©   (2004-04-08 09:52) [5]

sniknik ©   (08.04.04 08:38) [3]
А зря, надо было и с нуля по полной, конечно если это не на халяву. А если на халяву то пусть сам учится это делать.
Знаю я эти чистилки, не зря стоит на втором месте.


 
LordOfSilence ©   (2004-04-08 10:21) [6]

Я извиняюсь, но меня гложет любопытство. :-)
А что стоит на первом?


 
Anatoly Podgoretsky ©   (2004-04-08 10:23) [7]

Ну например чистилки реестра


 
sniknik ©   (2004-04-08 12:39) [8]

LordOfSilence ©   (08.04.04 10:21) [6]
> А что стоит на первом?
а черт его знает, я же туда не ездил все со слов возмущенного знакомого, а ему это ремонтник когда завернул.

Anatoly Podgoretsky ©   (08.04.04 09:52) [5]
не поможет пока не поймет, а он эти проги первыми после системы поставит, кстати по рекомендации журнала хакер откудато их надыбал. ;о))
(а то что там пишут обычно "не несем никакой ответственности..." игнорировал)

Imageman   (08.04.04 09:25) [4]
проще тогда сдать программу COM обьектом, система сама будет "подымать" ее при обращении (правда вот кто к ней обращаться будет ;о))).


 
sniknik ©   (2004-04-08 12:40) [9]

:) сдать = сделать


 
Xavier ©   (2004-04-08 14:13) [10]

А может просто при компиляции сделать минимальный размер стека и хипа?


 
Дубинин Алексей ©   (2004-04-08 22:25) [11]


> А память больще всего кушают графические изыски и навороты.)

В том то и дело, что никаких изысков старался не делать, даже компонеты самые наистандартнейшие. Никаких графических примочек. А программа вообще то из серии LaunchPad...наверное не правильно выразился на счет фонового режима.
Раньше небыло такой проблемы, да я думал и не будет, но несколько пользователей все таки не стали ею пользоваться потому что скушала она у них 10 Мб. Они в какой то мере правы...если это некий редактор, который ест много памяти, то не страшно, он же не постоянно работает, а эта утилитка постоянно...кому то не понравилось. Хотелось бы как в Дельфи. Свернул ее и память очистилась мгновенно...развернул...все вернулось...


 
_Sh_   (2004-04-09 00:12) [12]

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


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

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


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

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


 
sniknik ©   (2004-04-09 08:22) [15]

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

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


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

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


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

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...


 
Anatoly Podgoretsky ©   (2004-04-09 22:48) [18]

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


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

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


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

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


 
Zot   (2004-04-10 10:35) [21]

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

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

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


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

> Zot   (10.04.04 10:35) [21]

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


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

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


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

> Zot   (10.04.04 10:45) [23]

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


 
Zot   (2004-04-10 10:54) [25]

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


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

> Zot   (10.04.04 10:54) [25]

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


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


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


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


 
Anatoly Podgoretsky ©   (2004-04-11 12:44) [28]

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


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

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

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

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

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


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

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


 
KSergey ©   (2004-04-18 11:59) [31]

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


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

2 Zot

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

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

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



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

Форум: "WinAPI";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.037 c
1-1084959163
Vadim X
2004-05-19 13:32
2004.05.30
Int64 ??? Overflow


11-1073682537
mdw
2004-01-10 00:08
2004.05.30
Еще сайт посвященный KOL.


11-1072086191
Tenac
2003-12-22 12:43
2004.05.30
Что будет после KOL? И как сново сделать все как было


14-1083861937
Мазут Береговой
2004-05-06 20:45
2004.05.30
Как определить качество (вредность) дисплея?


3-1083682976
Ш-К
2004-05-04 19:02
2004.05.30
ADO to XML





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