Delphipodrška za objektno orijentirano programiranje je bogata i snažna. Klase i objekti omogućuju modularno programiranje koda. Uz modularnije i složenije komponente dolaze i sofisticiraniji i složeniji bube.
Dok se razvija aplikacije u Delphiju je (skoro) uvijek zabavno, postoje situacije kada se osjećate kao da je cijeli svijet protiv vas.
Kad god trebate koristiti (stvoriti) objekt u Delphiju, morate osloboditi memoriju koju je potrošio (jednom više nije potrebna). Sigurno vam blokovi za zaštitu / pokušaj memorije mogu vam pomoći u sprečavanju curenja memorije; Još je na vama da zaštitite svoj kôd.
Propuštanje memorije (ili resursa) događa se kada program izgubi mogućnost da oslobodi memoriju koju troši. Ponavljano istjecanje memorije uzrokuje rast memorije u procesu bez ikakvih granica. Propuštanje memorije ozbiljan je problem - ako imate kôd koji uzrokuje curenje memorije, u pokrenutoj aplikaciji 24/7, aplikacija će pojesti svu dostupnu memoriju i konačno učiniti da stroj prestane reagirati.
Propuštanje memorije u Delfima
Prvi korak za izbjegavanje curenja memorije je razumjeti kako se pojavljuju. Slijedi rasprava o nekim uobičajenim zamkama i najboljim praksama za pisanje nepropusnog Delphi koda.
U većini (jednostavnih) Delphi aplikacija, gdje koristite komponente (gumbe, zapise, uređivanja itd.) Koje ispadnete na obrazac (u vrijeme dizajniranja), ne morate se previše brinuti o upravljanju memorijom. Jednom kada se komponenta postavi na obrazac, oblik postaje njegov vlasnik i oslobodit će memoriju koju komponenta zauzme nakon što se oblik zatvori (uništi). Form je kao vlasnik odgovoran za razmještanje memorija komponenti koje je domaćin. Ukratko: komponente na obrascu kreiraju se i uništavaju automatski
Primjeri curenja memorije
U bilo kojoj nevijalnoj Delphi aplikaciji to ćete i poželjeti instancirati Delphi komponente u vrijeme rada. Imat ćete, također, neke svoje vlastite nastave. Recimo da imate klasu TDeveloper koja ima metodu DoProgram. Sada, kada trebate koristiti klasu TDeveloper, stvorite instancu klase pozivanjem Stvoriti metoda (konstruktor). Metoda Create dodjeljuje memoriju za novi objekt i vraća referencu na objekt.
var
zarko: TDeveloper
početi
zarko: = TMyObject. Stvoriti;
Žarko. DoProgram;
kraj;
I evo jednostavnog propuštanja memorije!
Kad god kreirate objekt, morate raspolagati memorijom koju je zauzimao. Da biste oslobodili memoriju dodijeljenom objektu, morate nazvati Besplatno metoda. Da biste bili potpuno sigurni, upotrijebite i pokušaj / konačno blokiraj:
var
zarko: TDeveloper
početi
zarko: = TMyObject. Stvoriti;
probati
Žarko. DoProgram;
konačno
Žarko. Besplatno;
kraj;
kraj;
Ovo je primjer sigurne dodjele memorije i koda za razmještaj.
Neke riječi upozorenja: Ako želite dinamički aktivirati komponentu Delphija i izričito je osloboditi nešto kasnije, uvijek unesite nulu kao vlasnika. Ako to ne učinite, može se uvesti nepotreban rizik, kao i problemi sa izvedbom i održavanjem koda.
Osim stvaranja i uništavanja objekata pomoću metode Create and Free, morate biti vrlo oprezni i kada koristite "vanjske" (datoteke, baze podataka itd.) Resurse.
Recimo da morate raditi s nekom tekstualnom datotekom. U vrlo jednostavnom scenariju, gdje se metoda AssignFile koristi za pridruživanje datoteke na disku datoteci varijablu kada završite s datotekom, morate nazvati CloseFile da biste pokrenuli rukovanje datoteke koristi. Ovdje nemate izričit poziv za "Besplatno".
var
F: TextFile;
S: string;
početi
AssignFile (F, 'c: \ somefile.txt');
probati
Readln (F, S);
konačno
ZatvoriFile (F);
kraj;
kraj;
Drugi primjer uključuje učitavanje vanjskih DLL-ova iz vašeg koda. Kad god upotrebljavate LoadLibrary, morate nazvati FreeLibrary:
var
dllHandle: THandle;
početi
dllHandle: = Loadlibrary ('MojaLiblioteka. DLL ');
// napraviti nešto s ovom DLL
ako je dllHandle <> 0, tada FreeLibrary (dllHandle);
kraj;
Memorija curi u .NET?
Iako s Delphi za .NET skupljač smeća (GC) upravlja većinom memorijskih zadataka, moguće je propuštanje memorije u .NET aplikacijama. Evo rasprave o članku GC u Delphiju za .NET.
Kako se boriti protiv curenja memorije
Osim pisanja modularnog koda koji je siguran u memoriju, sprečavanje propuštanja memorije može se obaviti i korištenjem nekih dostupnih alata treće strane. Delphi Alati za popravak istjecanja memorije pomažu vam uhvatiti aplikaciju Delphi greške kao što su oštećenje memorije, curenje memorije, pogreške u raspodjeli memorije, pogreške inicijalizacije varijable, sukobi promjenjive definicije, pogreške u pokazivaču i još mnogo toga.