![]() |
Re: temporäre Interfaces sofort freigeben?
Ah gut, ja das ist dann wirklich Pech...hm naja ich würds so machen denk ich:
Delphi-Quellcode:
Fänd ich zumindest übersichtlicher und da ich eh immer fast alles selbst freigebe ( auch Interfaces ) ^^ ....
procedure Test;
var XML: IXMLDocument; Node: IXMLNode; begin XML := coDOMDocument60.Create; try XML.Version := '1.0'; XML.StandAlone := 'yes'; XML.Encoding := 'UTF-8'; Node2 := XML.AddChild('xml'); Node := XML.DocumentElement; for i := 0 to 9999 do begin Node2 := Node.AddChild(IntToStr(i)); end; finally Node2 := nil; Node := nil; XML := nil; end; end; Sollte doch effektiv auf das gleiche hinauslaufen oder ? :gruebel: Ich muss mich umbedingt mehr mit sowas beschäftigen... Edit: Ach und ganz wichtig von wegen msXML.DocumentElement.AddChild ! ![]() |
Re: temporäre Interfaces sofort freigeben?
Zitat:
Delphi-Quellcode:
theoretisch würde es auch so laufen
procedure Test;
var XML: IXMLDocument; Node: IXMLNode; begin XML := coDOMDocument60.Create; try XML.Version := '1.0'; XML.StandAlone := 'yes'; XML.Encoding := 'UTF-8'; XML.AddChild('xml'); Node := XML.DocumentElement; for i := 0 to 9999 do Node.AddChild(IntToStr(i)); finally Node := nil; XML := nil; end; end;
Delphi-Quellcode:
Hier steckt ja nun alles in einer kleinen Prozedur, aber wenn die Variablen mal länger leben, dann könnte es schon auffallen.
procedure Test;
var XML: IXMLDocument; Node: IXMLNode; begin XML := coDOMDocument60.Create; XML.Version := '1.0'; XML.StandAlone := 'yes'; XML.Encoding := 'UTF-8'; XML.AddChild('xml'); Node := XML.DocumentElement; for i := 0 to 9999 do Node.AddChild(IntToStr(i)); end; Insgesamt sind diese Prozeduren (samt deiner) etwa gleich schnell und brauchen auch gleich viel Arbeitsspeicher, aber wo ich dann messen wollte, welcher Schritt wie lange braucht und Dergleichen, da kam halt nur Mist raus. Zitat:
[edit] ach, das gilt allgemein ... na mal sehn, ob ich mir das auch noch Merke :stupid: |
Re: temporäre Interfaces sofort freigeben?
Naja Interfaces benutze ich eh meistens nur in Verbindung mit einer Factory.
Da der Benutzer einer Methode z.b.
Delphi-Quellcode:
ja nicht umbedingt wüßte ob das Objekt freigegeben werden muss. ( Wenn er keine Ahnung von dem Inhalt der Methode hätte )
function ErstelleTest: TTest;
Bei
Delphi-Quellcode:
kann man sich sicher sein, dass man sich um Speicherlecks keine Sorgen machen muss.
function ErstelleTest: ITEST;
Und naja das LoD besagt kurz gesagt das man im besten Fall nur einen Punkt benutzen soll. Also Bsp: Nicht so:
Delphi-Quellcode:
Sondern eher so:
XML.DocumentElement.AddChild(IntToStr(i));
Delphi-Quellcode:
Auch wenn es auf den ersten Blick mehr Arbeit ist, sind meine Projekte dadurch um einiges übersichtlicher geworden und man bemerkt auch manchmal das der Weg den man gerade einschlägt eher unsauber ist.
procedure AddChild(Knoten, Inhalt);
begin Knoten.AddChild(InttoStr(i)); end; AddChild(XML.DocumentElement,InttoStr(i)); So koppelt man die Module nicht so eng miteinander ( zumindest wenn man es richtig macht ). Dabei helfen einem auch Programmierkonzepte, wie das Factory-Pattern, Command-Pattern, MVC-Pattern, etc... Btw falls man irgendwo sonst noch bei helfen kann Himitsu sag Bescheid, da ich eh nicht zuhause programmiere... da mir nie etwas sinnvolles einfällt, hätte ich theorethisch oft Zeit zum Helfen...bzw es zu versuchen *gg* |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz