Текущий архив: 2004.05.30;
Скачать: CL | DM;
ВнизКак уменьшить количество ОЗУ занимаемой программой Найти похожие ветки
← →
Дубинин Алексей © (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 вся ветка
Текущий архив: 2004.05.30;
Скачать: CL | DM;
Память: 0.53 MB
Время: 0.039 c