@sirius: ein abschaltbares
(gibt ja eh noch nicht genügend geheime Compilerschalter, also kommt es auf einen mehr nicht an) tempvar:=nil; nach gebrauch dieser Interface-Variablen würde vom "Tempo" her nicht viel nehmen und die paar Bytes mehr fallen in den größeren EXEen der neueren Compiler auch nimmer auf,
aber es würde die Speicherverwaltung und Referenzzählung
IMHO verbessern.
Die Häufigkeit der Speicherverwaltung und damit das Tempo mag es vielleicht bei Strings und Co. verbessern,
aber bei Interfaces macht dieses eben keinen Unterschied, ob gleich oder erst später.
@Alaitoc:
Aufgefallen ist es praktisch durch dieses
http://www.delphipraxis.net/internal...t.php?t=170881
Code:
***** Test 1 ******************************************************************
fill MS-
XML-
DOM with 10.000 nodes and save this into a file
create:21 fill:13006 save:110 free:[color=#ff0000][b]0[/b][/color]
[color=#0000ff]^ Zeit1[/color]
local free:[color=#ff0000][b]456[/b][/color]
[color=#0000ff]^^^ Zeit2[/color]
bei diesem Code kommen die oben genannten Werte raus
-
XML:=nil macht nix
- bei Prozedurende wird freigegeben
Delphi-Quellcode:
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');
for i := 0
to 9999
do
XML.DocumentElement.AddChild(IntToStr(i));
Start(Zeit1);
XML :=
nil;
Ende(Zeit1);
Start(Zeit2);
end;
Test;
Ende(Zeit2);
hier läuft es nun richtig
- bei
XML:=nil wird freigegeben
- bei Prozedurende passiert (fast) nix mehr
Delphi-Quellcode:
procedure Test;
var XML: IXMLDocument;
Node: IXMLNode;
begin
XML := coDOMDocument60.Create;
XML.Version := '
1.0';
XML.StandAlone := '
yes';
XML.Encoding := '
UTF-8';
Node2 :=
XML.AddChild('
xml');
Node2 :=
nil;
Node :=
XML.DocumentElement;
for i := 0
to 9999
do
Node2 := Node.AddChild(IntToStr(i));
Node2 :=
nil;
// oder gleich mit in die Schleife ... ist ja soweit egal
Node :=
nil;
Start(Zeit1);
XML :=
nil;
Ende(Zeit1);
Start(Zeit2);
end;
Test;
Ende(Zeit2);