Оптимизација употребе меморије вашег програма Делпхи

click fraud protection

При писању дуготрајних апликација - врста програма која ће већи дио дана минимизирати на траку задатака или Систем касета, може постати важно да се програм не дозволи да „побегне“ са употребом меморије.

Два десна ступца означавају употребу процесора (времена) и утрошак меморије. Ако неки процес озбиљно утиче на било који од ових, ваш систем ће се успорити.

Врста ствари која често утиче на коришћење ЦПУ-а је програм који се петља (питајте било којег програмера који је заборавио да стави изјаву „прочитај следеће“ у петљу за обраду датотека). Такви проблеми се обично лако отклоне.

Употреба меморије, с друге стране, није увек очигледна и њоме је потребно управљати више него исправљати. Претпоставимо на пример да се покреће програм за снимање.

Овај програм се користи током дана, могуће за телефонирање у служби за помоћ или из неког другог разлога. Једноставно нема смисла искључити га сваких двадесет минута и поново га покренути. Користиће се током дана, мада у ретким интервалима.

Ако се тај програм ослања на неку тешку унутрашњу обраду или има много уметничких дела на обрасцима, пре или касније ће се десити

instagram viewer
употреба меморије ће расти, остављајући мање меморије за остале чешће процесе, подстичући позивање активности и на крају успоравање рачунара.

Рецимо да ћете дизајнирати програм са главном формом и два додатна (модална) облика. Обично, у зависности од верзије Делпхија, Делпхи ће уметнути обрасце у пројектна јединица (ДПР датотека) и укључиваће линију за креирање свих образаца при покретању апликације (Апплицатион. ЦреатеФорм (...)

Линије укључене у пројектну јединицу су дизајниране у Делпхију и одличне су за људе који Делпхи нису упознати или га тек почињу користити. Прикладно је и корисно. То такође значи да ће СВИ обрасци бити креирани када се програм покрене, а НЕ када су потребни.

У зависности од тога о чему се ради у пројекту и функционалности коју сте имплементирали, образац може да користи много меморије облици (или уопште: предмети) треба да се креирају само када је то потребно и уништавају (ослобађају) чим их више нема неопходно.

Оба, "ДиалогФорм" и "ОццасионалФорм" треба уклонити са листе "Ауто-цреате форм" и пребацити на листу "Доступни обрасци".

Имајте на уму да се овде описана стратегија заснива на претпоставци да је дотични програм у стварном времену програм „хватања“. Међутим, може се лако прилагодити процесима типа серије.

Делпхи је покушао да то смањи на минимум и има сопствену архитектуру управљања меморијом која користи много мање блокове, али ово је практично неупотребљива у Виндовс окружењу, јер распоређивање меморије у коначници остаје на оперативном систему.

Након што је Виндовс доделио блок меморије процесу и тај процес ослобађа 99,9% меморије, Виндовс ће и даље видети како се користи читав блок, чак и ако се заправо користи само један бајт блока користи. Добра вест је да Виндовс пружа механизам за чишћење овог проблема. Шкољка нам пружа АПИ који се зове СетПроцессВоркингСетСизе. Ево потписа:

По дефиницији, функција СетПроцессВоркингСетСизе поставља минималне и максималне величине радног сета за наведени процес.

Овај АПИ је предвиђен за омогућавање постављања ниског нивоа минималних и максималних граница меморије за простор у којем се користи меморија за процес. Међутим, у њу је уграђена мала сметња која има највише среће.

Ако су и минимална и максимална вредност постављене на $ ФФФФФФФФ, АПИ ће привремено смањити постављену величину на 0, заменити је из меморије и одмах након ње одскаче у РАМ, имаће му минималну количину меморије која му је додељена (све се то дешава у року од неколико наносекунди, па би кориснику требало да буде неприметно).

Позив овом АПИ-ју биће упућен само у одређеним интервалима - не у континуитету, тако да уопште не би требало да има утицаја на перформансе.

Сада периодично проверавајте последњи број крпеља у односу на „Сада“ и ако је разлика између ова два већа од периода који се сматра сигурним празним временом, подесите меморију.

Сада одлучите за који временски период сматрат ћете да програм не ради. У мом случају одлучили смо се за две минуте, али можете изабрати било који период који желите овисно о околностима.

Прилагођавање ове методе за дуготрајно обрађивање или серијске процесе је прилично једноставно. Обично ћете имати добру идеју где ће започети дуготрајни процес (нпр. Почетак петље кроз читање милиона записа базе података) и где ће се он завршити (крај петље за читање базе података).

Једноставно онемогућите тајмер на почетку процеса и поново га укључите на крају процеса.

instagram story viewer