Pri písaní dlhodobých aplikácií - druh programov, ktoré strávia väčšinu dňa minimalizovanú na paneli úloh alebo System tray, môže byť dôležité nenechať program „utiecť“ s využitím pamäte.
Dva stĺpce úplne vpravo označujú využitie CPU (čas) a využitie pamäte. Ak proces ovplyvňuje niektorý z týchto problémov, váš systém sa spomalí.
Druh, ktorý často ovplyvňuje využitie CPU, je program, ktorý sa opakuje (opýtajte sa každého programátora, ktorý zabudol vložiť príkaz „read next“ do slučky na spracovanie súborov). Tieto druhy problémov sa zvyčajne pomerne ľahko napravia.
Na druhej strane využitie pamäte nie je vždy zrejmé a je potrebné ju spravovať viac, ako len opraviť. Predpokladajme napríklad, že je spustený program typu snímania.
Tento program sa používa po celý deň, pravdepodobne na telefonické zachytenie v technickej službe alebo z nejakého iného dôvodu. Len to nemá zmysel vypnúť ho každých 20 minút a potom ho znova spustiť. Použije sa po celý deň, aj keď v zriedkavých intervaloch.
Ak sa tento program spolieha na určité ťažké interné spracovanie alebo má na svojich formách veľa umeleckých diel, skôr či neskôr
Využitie pamäte bude rásť a zanecháva menej pamäte pre ďalšie častejšie procesy, zvyšuje aktivitu stránkovania a nakoniec spomaľuje počítač.Povedzme, že sa chystáte navrhnúť program s hlavnou formou a dvoma ďalšími (modálnymi) formami. Typicky, v závislosti od vašej verzie Delphi, Delphi vloží formuláre do projektová jednotka (Súbor DPR) a bude obsahovať riadok na vytvorenie všetkých formulárov pri štarte aplikácie (Application. CreateForm (...)
Linky zahrnuté v projektovej jednotke sú dizajnom spoločnosti Delphi a sú skvelé pre ľudí, ktorí nie sú s Delphi oboznámení alebo ju práve začínajú používať. Je to pohodlné a užitočné. To tiež znamená, že VŠETKY formuláre sa vytvoria pri spustení programu a NIE, keď sú potrebné.
V závislosti na tom, o čom je váš projekt a funkčnosti, ktorú ste implementovali, môže formulár použiť veľa pamäte formuláre (alebo všeobecne: objekty) by sa mali vytvárať iba v prípade potreby a zničiť (uvoľniť), len ak už nie sú nevyhnutné.
„DialogForm“ aj „OccasionalForm“ je potrebné odstrániť zo zoznamu „Automatické vytváranie formulárov“ a presunúť do zoznamu „Dostupné formuláre“.
Upozorňujeme, že tu načrtnutá stratégia je založená na predpoklade, že daný program je programom typu „zachytávania“ v reálnom čase. Môže sa však ľahko prispôsobiť procesom šaržového typu.
Delphi sa snažil minimalizovať to a má svoju vlastnú architektúru správy pamäte, ktorá používa oveľa menšie bloky, ale to je prakticky zbytočné v prostredí Windows, pretože pridelenie pamäte v konečnom dôsledku spočíva na operačnom systéme.
Keď systém Windows pridelí niektorému procesu blok pamäte a tento proces uvoľní 99,9% pamäte, Windows budú stále vnímať celý blok, ktorý sa používa, aj keď v skutočnosti je iba jeden bajt bloku použité. Dobrou správou je, že systém Windows poskytuje mechanizmus na odstránenie tohto problému. Shell nám poskytuje API s názvom SetProcessWorkingSetSize. Tu je podpis:
Podľa definície funkcia SetProcessWorkingSetSize nastavuje minimálnu a maximálnu veľkosť pracovnej sady pre určený proces.
Účelom tohto rozhrania API je umožniť nastavenie minimálnej a maximálnej hranice pamäte pre priestor na využitie pamäte procesu. Má však v sebe zabudovaný malý vtip, ktorý je najšťastnejší.
Ak je minimálna aj maximálna hodnota nastavená na $ FFFFFFFF, API dočasne oreže nastavenú veľkosť na 0, vymení ju z pamäte a okamžite po jej dokončení odrazí späť do pamäte RAM, bude mať k dispozícii pridelenú minimálnu veľkosť pamäte (všetko sa to stane v priebehu pár nanosekúnd, takže pre používateľa by to malo byť nepostrehnuteľné).
Volanie do tohto rozhrania API sa uskutoční iba v daných intervaloch - nie nepretržite, takže by nemal mať žiadny vplyv na výkon.
Teraz pravidelne kontrolujte posledný počet kliešťov proti „Now“ a ak je rozdiel medzi nimi väčší ako perióda považovaná za bezpečnú periódu nečinnosti, vyrovnajte pamäť.
Teraz sa rozhodnite, po uplynutí ktorého obdobia budete program považovať za nečinný. V mojom prípade sme sa rozhodli pre dve minúty, ale v závislosti od okolností si môžete vybrať ľubovoľné obdobie.
Prispôsobenie tejto metódy dlhým časom spracovania alebo dávkovým procesom je celkom jednoduché. Normálne budete mať dobrý nápad, kde sa začne zdĺhavý proces (napr. Začiatok čítania slučky cez milióny databázových záznamov) a kde sa skončí (koniec slučky čítania databázy).
Na začiatku procesu jednoducho vypnite časovač a na konci procesu ho znova aktivujte.