Bonjour

Dans un projet FMX, j'utilise:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 ?