Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
De variabler/objekter som du selv creater i din KODE skal du også selv sørge for at destroye. Eksempel: var sl: TStringList; begin sl := TStringList.Create; // Her creater vi selv et objekt try .. finally sl.Free; // Så skal vi huske Free af objektet til sidst. end; end;
De variabler som du blot skriver i VAR sørger Delphi for automatisk at rydde op. Eksempel: var I: Integer; S: string; begin
Alt hvad der ligner klasser (strenge er desværre en undtagelse) skal frigives da de oprettes globalt (mener det kaldes at oprette på "heapen").
Hvis du laver en TStringList i en procedure, så er den ikke påvirket af procedurens "scope". Det betyder intet at din variabel er erklæret derinde, såddan som i Tolderlunds eksempel.
Vigtigt: Brug try-finally så konsekvent som muligt.
En anden mulighed for overforbrug af ram er hvis dine "forms" (vinduer) er oprettet automatisk. Delphi har en indstilling som opretter alle dine forme automatisk. Virkelig noget lort når man har mange forme for det fylder. Denne indstilling er desværre default. Har tit stødt på at formen er oprettet men at når de skal vises, så oprettes programmøren dem endnu en gang => Stort spild af hukommelse. Når så formen lukkes igen, så glemmer samme programmør tit også at frigive det => Endnu større spild af hukommelse.
I Delphi 2006 SKAL du slå det fra i: Tools, Options, Environment options, VCL-designer. Fjern fluebenet i "Auto create forms & datamodules".
Den rigtige måde er at oprette og lukke i en try finally:
procedure VisForm() var frmMyData : TfrmMyData; begin frmMyData := TfrmMyData.Create(self); try if frmMyData.ShowModal = mrOK then begin end; finally frmMyData.Free; end; end;
Alternativt kan man, i TfrmMyData.OnClose-eventet, skrive "Action := caFree". Derved frigives formen automatisk når den lukkes. Ikke kønt men kan have sin berettigelse eksempelvis ved about-forme:
procedure VisForm(); var frmMyData : TfrmMyData; begin frmMyData := TfrmMyData.Create(self); if frmMyData.ShowModal = mrOK then begin end; end;
En kort og nørdet version af samme er i øvrigt:
begin if TfrmMyData.Create(self).ShowModal = mrOK then begin end; end;
Et andet sted hvor man bruger "Action := caFree" er i MDI-applikationer (Word og Excel har været eksempler på MDI-programmer) hvor MDI-childs må lukkes på den måde.
I forbindelse med de autooprettede vinduer glemte jeg at fortælle, at i eksisterende projekter, skal du huske at fjerne dem fra projektets options-menu: Project, Options, Forms. Her klikker du forme over i den højre listboks så de skal oprettes manuelt. Undtaget er din mainform og eventuelt også datamoduler.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.