Минималната програма

18 отговора 974 прегледа
#1

Минималната програма

Налага ми се да направя малка програмка която да заема минимално място в оперативната памет. Изизскванията са да отворя една таблица и да слушам на един порт за връзка по TCP/IP

Отговор
в отговор на r4ndOm #2

Re: Минималната програма

ами бравос за програмката. не разбирам само че какъв ти е проблема и защо си публикувал съобщението:

a. искаш да се похвалиш
b. не знаеш как да я направиш (какво по-конкретно)
c. търсиш някой да ти я направи

вашият отговор? _

(на подчертавката въведете верният отговор ;)

Отговор
в отговор на бpaвoc #3

Re: Минималната програма

... вашият отговор? z



Светът е малък нека си помагаме.
Отговор
в отговор на r4ndOm #4

Да продължим духа на колегите:

Ани ако само ще отваря таблица и ще слуша порт какъв е смисъла на програмата?
Няма ли поне нещо от порта да пише в таблицата?
Защото така, както си написал, само средствата за мониторинг на таблиците и портовете ще забелязват, че твоята програма работи.

Отговор
в отговор на бpaвoc #5

Хммм

Вярно, че тъпо съм го написал . Просто много бързах като публикувах този постинг. Целта ми е да я направя да заема доста по-малко място в оперативната памет. В момента съм направил почти цялата функционалност, но в паметта заема ~2700k, което ми се струва неоправдано много... Целта на питането ми е да науча за различни начини на намаляване на този размер

Отговор
в отговор на NikB #6

Re: Да продължим духа на колегите:

При получаване на запитване от порта ще чете от таблицата и ще праща отговор през порта

Отговор
в отговор на r4ndOm #7

без VCL...

Ако искаш да заема малко памет - не я пиши на делфи или поне не ползвай VCL-а.
Каква е тая таблица? Някава база данни предполагам? Какво ползваш? BDE? Колко е сложна като структура и много записи ли ще има? Ще пишеш ли нещо в нея или само ще я четеш? Не можеш ли да ползваш текстов/двоичен файл за тия данни? За сокетите какво ползваш? Indy? Ако искаш да ти заема малко памет ползвай директно WinSock...
Виж също така KOL библиотеката... Разбира се, има и други алтернативи, но това го знам, а и има доста примерни програми на сайта.
Та в общи линии искам да кажа, че или трябва да се примириш с този обем на заеманата памет или да се откажеш от VCL-а...

Отговор
в отговор на r4ndOm #8

Минималната програма - Решение

Намерих една функция от kernel.dll: SetProcessWorkingSetSize като я викам със следните параметри: SetProcessWorkingSetSize(hndl, $FFFFFFFF, $FFFFFFFF);, като това би трябвало да предизвика максимално използване на page файла и минимално на оперативната памет. На праркика от ~2700k процеса вече заема около ~270k, което ме устройва идеално. Лошото е, че не знам какви странични ефекти (ако изобщо има такива) може да предизвика използването на функцията, ако някой е по запознат, нека постне някой ред...
10x

Отговор
в отговор на r4ndOm #9

Преди време получих подобна помощ от клуба

Помогна ми един support (за съжаление му знам само е-мейла:), но тъй като ти си нерегистриран - как да ти го изпратя?
Сорса е около 7кб, а изпълнимия файл, който работи с порта: 44 кб.
Ако послушаш съветите и си организираш един двоичен файл - цялата ти програма ще стане 60-80кб.
Пиши някакъв е-мейл, за да ти изпратя примерчето.

Отговор
в отговор на NikB #10

Re: Преди време получих подобна помощ от клуба

Хммм... днес около обяд пуснах един пост в който споделям какво решение съм намерил. Прочетох тук-там за този начин на оптимизиране на оперативната памет и попаднах на някой писания в които се твърдеше, че използването на тази функция не е препоръчително (особенно честото и използване). Но все още не намирам нищо подкрепено с аргументи... Та в този ред на мисли се чудя дали да продължавам да се задълбавам с тези неща или да оставя съдбата да ги реши (изтества).
Все пак ще ми е полезно и интересно да ми изпратиш кода (за което предварително благодаря). Таблицата обаче не мога да заместя с нищо друго понеже се използва от други приложения и т.н.
[email protected]

Отговор
в отговор на r4ndOm #11

Изпратих ти

Изпратих ти краткото примерче със сокети на апи

Отговор
в отговор на NikB #12

Re: Изпратих ти

10x
Май ще ползвам и двата варианта едновременно. Темата се оказва доста интересна поне за мен

Отговор
в отговор на r4ndOm #13

Re: Минималната програма - Решение

Не разбрахме само, откъде произхожда условието за минимално използване на оперативната памет, при положение, че всеки съвременен компютър има като минимум поне 256MB RAM. Да не би да планираш да я пускаш тая програма на някоя 386-ца с 4MB и Win95?!

Mixy
Отговор
в отговор на Mixy #14

!?

Не разбрахме само, откъде произхожда условието за минимално използване на оперативната памет

Съжалявам, че трябва да отговоря на въпроса по този начин ама наистина мисля, че знаеш отговора... Защо ли хората са измислили различни алгоритми за сортиране на масиви - та нали всеки по съвременен компютър може да ги сортира за части от секундата..?!

Отговор
в отговор на r4ndOm #15

Re: Има малка разлика ...

... между "време за изпълнение" и "заемани ресурси" от даден алгоритъм. Понятията са взаимно свързани по между си, но са напълно различни. В твоя случай става въпрос за спестяване на системен ресурс (памет) което в миналото е било оправдано, предвид ограниченията в технологията и наличните ресурси. В днешно време всички гонят бързодействието (или по-общо performance). Но едва ли ще постигнеш някакво подобряване на производителността точно чрез page swapping. ОК, пестиш ресурс, но аз наистина не разбирам поради каква причина? Нещо го налага или просто си любител на компактните решения? Би ли пояснил защото и на мен ми е интересно?

Mixy

P.S. Извинявай, ако си се почуствал засегнат от предния ми пост, не това бе целта ми. Просто наистина ми е любопитно.

Редактирано от Mixy на

Отговор
в отговор на Mixy #16

Re: Има малка разлика ...

Работя върху сравнително голям проект (не го правя сам) с много приложения и голяма база данни, до сега на нито едно от тях не съм си и помислял точно за такъв вид оптимизиране. Повечето от приложенията в този проект са сравнително големи, като е теоритично възможно всички да бъдат стартирани върху един обикнорен компютър. Около 3-4 приложения не могат да бъдат оптимизирани по този начин (няма време да стане, няма кой да седне да го направи) и върху тях пада почти цялата тежест на задачите. Сега ми се наложи да направя две Guard програмки, които да държат два сървъра пуснати и нищо повече - цялата работа по тях е за половин работен ден с избора на иконка . Като се замисля най тежкото от по големите приложения тежи на оперативната памет около 15000Кб средно... Обаче 2х2700Кб са 5400Кб - повече от една трета! Като прибавиш към тези факти и това, че ще има и други помощни програмки изпълняващи подобни функции смятам, че това си е разхищение на памет и ламерщина. Иначе ми се иска абсолютно всичко да е изпипано и да мога да се нарека "любител на компактните решения", но за сега просто няма как.

Отговор
в отговор на r4ndOm #17

Re: Има малка разлика ...

Помисли в посока dll и bpl.
При много едновременно работещи процеси, ползващи общи библиотеки общия обем заета памет е по-малка от сумата на паметта заета от всеки един процес.

Отговор
в отговор на NDeu #18

Напълно съм съгласен

С dll е най-правилният начин

Отговор
в отговор на r4ndOm #19

Интересно решение

Какво става най-добре MS знаят, защото те са го правили. Накратко с това извикване си изхърляш програмата от RAM-a на swap-a. Е, ако тръгне нещо да прави тази програма, Windows ще я качи обратно. Тъй че ще работи, ама малко по бавно само.

[линк]

If both dwMinimumWorkingSetSize and dwMaximumWorkingSetSize have the value (SIZE_T)-1, the function temporarily trims the working set of the specified process to zero. This essentially swaps the process out of physical RAM memory.

Отговор