Pri pisanju dugotrajnih aplikacija - vrsta programa koja će veći dio dana minimizirati na programsku traku ili sistemska traka, Može postati važno ne dopustiti programu da "bježi" s upotrebom memorije.
Dva desna stupca označavaju potrošnju CPU-a (vremena) i memorije. Ako postupak ozbiljno utječe na bilo koji od ovih, vaš sustav će se usporiti.
Vrsta koja često utječe na korištenje CPU-a je program koji se petlja (pitajte bilo kojeg programera koji je zaboravio staviti izjavu "pročitajte sljedeće" u petlju za obradu datoteka). Takve se probleme obično lako ispraviti.
Uporaba memorije, s druge strane, nije uvijek prividna i njome je potrebno upravljati više nego ispravljati. Pretpostavimo na primjer da se pokreće program za snimanje.
Ovaj se program koristi tijekom dana, možda za telefoniranje u službi za pomoć ili iz nekog drugog razloga. Jednostavno je nema smisla isključiti svakih dvadeset minuta i ponovo pokrenuti. Koristi se tijekom dana, iako u rijetkim intervalima.
Ako se taj program oslanja na neku tešku internu obradu ili ima mnogo umjetničkih djela na svojim oblicima, prije ili kasnije njegovo
korištenje memorije će rasti, ostavljajući manje memorije za druge učestalije procese, ubrzavanje stranične aktivnosti i na kraju usporavanje računala.Recimo da ćete dizajnirati program s glavnim obrascem i dva dodatna (modalna) oblika. Obično, ovisno o verziji Delphija, Delphi će umetnuti obrasce u projektna jedinica (DPR datoteka), a uključivat će liniju za stvaranje svih obrazaca pri pokretanju aplikacije (Application. CreateForm (...)
Linije uključene u projektnu jedinicu su dizajna tvrtke Delphi i izvrsne su za ljude koji Delphi nisu upoznati ili ga tek počinju koristiti. Prikladno je i korisno. To također znači da će se svi obrasci kreirati kad se program pokrene, a NE kada su potrebni.
Ovisno o čemu se radi u projektu i o funkciji koju ste implementirali, obrazac može koristiti puno memorije oblici (ili općenito: predmeti) trebaju se stvarati samo kad je potrebno i uništiti (osloboditi se) čim ih više nema potrebno.
Oba, "DialogForm" i "OccasionalForm" potrebno je ukloniti s popisa "Automatsko stvaranje obrazaca" i premjestiti na popis "Dostupni obrasci".
Imajte na umu da se ovdje opisana strategija temelji na pretpostavci da je dotični program u stvarnom vremenu "hvatanje" programa. Međutim, može se lako prilagoditi za serijske procese.
Delphi pokušao je to minimizirati i ima svoju vlastitu arhitekturu upravljanja memorijom koja koristi mnogo manje blokove, ali ovo je gotovo neupotrebljivo u Windows okruženju jer se raspoređivanje memorije u konačnici odnosi na operativni sustav.
Nakon što je Windows dodijelio blok memorije procesu i taj proces oslobađa 99,9% memorije, Windows će i dalje percipirati cijeli blok koji se koristi, čak i ako se zapravo koristi samo jedan bajt bloka koristi. Dobra vijest je da Windows pruža mehanizam za čišćenje ovog problema. Školjka nam pruža API koji se zove SetProcessWorkingSetSize. Evo potpisa:
Po definiciji, funkcija SetProcessWorkingSetSize postavlja minimalne i maksimalne veličine radnog skupa za navedeni proces.
Ovaj API namijenjen je omogućavanju postavljanja niske razine minimalnih i maksimalnih memorijskih granica za prostor korištenja memorije u procesu. Međutim, u nju je ugrađena malo čuda koja je najsretnija.
Ako su i minimalna i maksimalna vrijednost postavljene na $ FFFFFFFF, tada će API privremeno smanjiti postavljenu veličinu na 0, zamijenivši je iz memorije i odmah nakon nje vratit će se u RAM-u, bit će mu dodijeljena minimalna količina memorije (sve se to događa u roku od nekoliko nanosekundi, pa bi korisniku trebalo biti neprimjetan).
Poziv ovom API-ju izvršit će se samo u određenim intervalima - ne kontinuirano, tako da uopće ne bi trebao imati utjecaja na izvedbu.
Sada, povremeno provjeravajte posljednji broj krpelja u odnosu na "Sada" i ako je razlika između ta dva veća od razdoblja koje se smatra sigurnim praznim vremenom, obrežite memoriju.
Sada odlučite nakon određenog vremenskog razdoblja smatrat ćete da program miruje. U mom slučaju odlučili smo se za dvije minute, ali možete odabrati bilo koje razdoblje koje želite ovisno o okolnostima.
Prilagodba ove metode za dugotrajno obrađivanje ili serijske procese prilično je jednostavna. Normalno je da ćete imati dobru ideju gdje će započeti dugotrajni proces (npr. Početak čitanja petlje kroz milijune zapisa baze podataka) i gdje će završiti (kraj petlje za čitanje baze podataka).
Jednostavno onemogućite tajmer na početku postupka i ponovno ga omogućite na kraju postupka.