Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.183 Beiträge
 
Delphi 12 Athens
 
#2

AW: Kann ich das IntfClear vorziehen?

  Alt 16. Okt 2014, 19:09
Kann ich das IntfClear am Ende einer Methode vorziehen?
Nein.

Internen Temp-Variablen kannst du nicht freigeben, da du nicht an deren Variablen ran kommst.
Einzige Lösungen:
  • vermeiden solcher Variablen, also alle Rückgabewerte immer in Variablen ... das gilt auch für Zwischenschritte, wo soein Interface entstehen könnte.
    In deinem Fall wäre es das Result vom xmlDoc.DocumentElement im xmlDoc.DocumentElement.AddChild('someChildNode');
  • den Code in einen extra Bereich verschieben, bei dessen Ende alles aus dessen Scope freigegeben wird
  • nichts in initialization/finalization, was ein Interface/DynArray/String/Vatiant/... zurück gibt

Keine Aufrufketten (maximal 1 Punkt pro Ausdruck, abgesehn von Namespaces) und alle Results selbst behandeln.
Delphi-Quellcode:
CoInitializeEx(nil, COINIT_APARTMENTTHREADED);
try
  xmlDoc := LoadXMLData('<rootNode />');
  xmlRoot := xmlDoc.DocumentElement;
  xmlNode := xmlRoot.AddChild('someChildNode');
  xmlNode := nil; xmlRoot := nil; xmlDoc := nil;
finally
  CoUninitialize;
end;
Delphi-Quellcode:
{procedure doXmlStuff;
var
  xmlDoc: IXMLDocument;
begin
  xmlDoc := LoadXMLData('<rootNode />');
  xmlDoc.DocumentElement.AddChild('someChildNode');
  //xmlDoc := nil;
end;}


procedure doXmlStuff;
begin
  LoadXMLData('<rootNode />').DocumentElement.AddChild('someChildNode');
end; // hier alles automatisch weg

procedure myProc;
begin
  CoInitializeEx(nil, COINIT_APARTMENTTHREADED);
  try
    doXMLStuff;
  finally
    CoUninitialize;
  end;
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (16. Okt 2014 um 19:16 Uhr)
  Mit Zitat antworten Zitat