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

Вниз

что можно сделать с отжираемым объемом памяти?   Найти похожие ветки 

 
Barloggg   (2008-03-17 11:11) [0]

есть программа.
создает applet.

формы нет. больших объемов данных нет.
файл 90 кб.
в оперативке занимает 3-4 мб. откуда?
работает с десятком-другим коротких динамических массивов и битмапом размерами 200х50 точек. ну, с канвой конечно. да еще и stream для загрузки из файла.

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

или подобная вещь типична для дельфей вообще и не лечится?

а ведь в диспетчере задач висят процессы у который использование оперативки и 100 кб и 50кб.
я тоже так хочу!


 
AndreyRus ©   (2008-03-21 03:38) [1]

^


 
Vadim Petrov   (2008-03-22 21:45) [2]

ну, где-то так
uses Windows, SysUtils;

procedure TrimWorkingSet;
var
 MainHandle: THandle;
begin
 if Win32Platform = VER_PLATFORM_WIN32_NT then
 begin
   MainHandle := OpenProcess(PROCESS_ALL_ACCESS, false, GetCurrentProcessID);
   SetProcessWorkingSetSize(MainHandle, DWORD(-1), DWORD(-1));
   CloseHandle(MainHandle);
 end;
end;


 
Andrey_rus   (2008-03-23 11:57) [3]


> ну, где-то так

Лучше так, одной строкой -     SetProcessWorkingSetSize(GetCurrentProcess, DWORD(-1), DWORD(-1));

Но это все самообман. Приложение на КОЛ действительно "кушает" памяти гораздо больше чем аналогичное на чистом WinApi. Здесь нужно серьезно разбираться...


 
Elec3C ©   (2008-03-23 16:06) [4]


> я тоже так хочу!

с

> работает с десятком-другим коротких динамических массивов
> и битмапом размерами 200х50 точек. ну, с канвой конечно.
>  да еще и stream для загрузки из файла.

ты хочешь чтобы прога занимала 100 кб? Каким то образом, а?


 
Barloggg   (2008-03-24 10:28) [5]

ну, малость поизучал это дело

пустое консольное приложение где текста один единственный readln занимает 900 кб. без замены системных файлов.

добавление NewApplet доводит уровень оперативки до 1.6 мб.
тогда я подумал, может дело в ООП? и прикола ради решил переписать один модуль без использования ООП, то есть глобальный динамический массив и вложенные record и сравнил с тем же модулем, но на вложенных object.
результат получился одинаковым!
решил покосить на строки, ведь это же массивы и под них динамически выделяется память.
тогда заменил string на shortstring результат получился неоднозначным: shortstring в модуле без ООП добавил 400кб оперативки, а в модуле с ООП не дал разницы.
гм.

про SetProcessWorkingSetSize(GetCurrentProcess, DWORD(-1), DWORD(-1)); спасибо, посмотрю

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


 
lse   (2008-03-24 13:06) [6]

А ты посмотри какие длл грузятся вместе с приложением. Например, такой код:
program tiny;
uses kol;
begin
 MsgOk("1");
end.
на винте занимает 14Кб, в памяти 44кб, далее список длл:
- ntdll.dll - 0.7Mb
- kernel32.dll - 1.0 Mb
- User32.dll - 0.6 Mb
- Gdi32.dll - 284 Kb
- Advapi32.dll - 0.7 Mb
- Rpcrt4.dll - 0.6 Mb
- Secur32.dll - 68 Kb
- Uxtheme.dll - 224 Kb
- Msvcrt.dll - 352 Kb
- Msctf.dll - 300 Kb
итого около 2Мб.


 
=BuckLr= ©   (2008-03-24 15:13) [7]


> итого около 2Мб.

Большинство dll во время старта программы будут уже загружены. Так что нам они ничем не мешают


 
Barloggg   (2008-03-24 16:09) [8]

кстати еще посмотрел в сторону выделения памяти под что-то командой компилятора {$M 0,0} (что-то такое) и прога не запустилась :) поигрался со значениям, но эффекта тоже не получил.


 
Тыщ   (2008-03-24 18:38) [9]

> а ведь в диспетчере задач висят процессы у который использование оперативки и 100 кб и 50кб.

Среди обычных программ там что-нибудь есть? Или только сервисы и ntvdm?

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

Создавай окно с hWndParent = HWND_MESSAGE, может, поможет сэкономить ресурсов.

> кстати еще посмотрел в сторону выделения памяти под что-то командой компилятора {$M 0,0}

Не издевайся над стеком. Все равно под него память только резервируется, а не выделяется, а если резерв закончится, Windows просто прибъет твою прогу без всяких сообщений.

А вообще lse [6] правильную мысль высказал.


 
Vadim Petrov   (2008-03-24 21:03) [10]

Господа, вообще говоря, этот вопрос уже здесь обсуждался, и даже неоднократно.
Вкратце, объем памяти показываемый в диспетчере НЕ СООТВЕТСТВУЕТ реальной физической памяти, выделенной процессу.
Хотите, чтобы в диспетчере отображались меньшие цифры? Используйте
SetProcessWorkingSetSize

Что касается использования GetCurrentProcess, то на мой взгляд, сделать CloseHandle идеологически вернее. ИМХО. Все ж таки не на JAVA или C# пишем.
Не стоит расслабляться даже в мелочах.


 
KOLBoss ©   (2008-03-25 04:36) [11]


> Vadim Petrov   [10]

А что разве GetCurrentProcess открывает какойто Handle?



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

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

Наверх





Память: 0.47 MB
Время: 0.016 c
4-1219896109
andreil
2008-08-28 08:01
2009.10.18
Изменение размера файла


15-1250195405
Юрий
2009-08-14 00:30
2009.10.18
С днем рождения ! 14 августа 2009 пятница


15-1250571823
Вопрощающий
2009-08-18 09:03
2009.10.18
GLScene и Delphi2006 (for Win32)


2-1250593303
Miklyha
2009-08-18 15:01
2009.10.18
Не срабатывает Form1.Close;


15-1250183499
matt
2009-08-13 21:11
2009.10.18
Skype





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