Bonjour
Dans un projet FMX, j'utilise:
DefaultDOMVendor := sOmniXmlVendor;
Dans une fonction, je lis ce fichier XML pour remplir plusieurs tableaux d'entier ou de single.
Les tableaux sont dimensionnés et pré-remplis de 0 avant lecture du node XML correspondant.
Dans la première version, je faisais un truc comme ça:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
NdBlock := Node.ChildNodes.First;
I := 1;
while Assigned(NdBlock) do
begin
NdLine := NdBlock.ChildNodes.First;
while Assigned(NdLine) do
begin
if I <= High(Heights) then
Heights[I] := GetInt(NdLine.NodeValue)
else
break;
Inc(I);
NdLine := NdLine.NextSibling;
end;
NdBlock := NdBlock.NextSibling;
end; |
Entre la première et la dernière ligne de code, mon programme prenait 2.5mo de RAM supplémentaire. Je ne comprends toujours pas pourquoi.
J'ai remplacé par :
1 2 3 4 5 6 7 8 9 10 11
|
K := 0;
for I := 0 to Node.ChildNodes.Count - 1 do
begin
NdBlock := Node.ChildNodes[I];
for J := 0 to NdBlock.ChildNodes.Count - 1 do
begin
Inc(K);
Heights[K] := GetInt(NdBlock.ChildNodes[J].NodeValue)
end;
end; |
Maintenant, environ 1 mo de moins mais toujours une perte qui ne se rattrape jamais même après finalisation de mon IXMLDocument qui me sert de lecteur.
Questions:
Est-il normal que je perde autant de RAM à chaque utilisation ?
Connaissez-vous une alternative qui ferait le boulot mieux que ça ?
Partager