Je vois que l'on utilise FindNode avec un Constructeur Fichier, je poursuis ce que disais Andnotor sur la VA et bizarrie de libération, interface ...
C'est effectivement pénible la gestion particulière avec le Owner et sans le Owner ...
Sans Owner, on peut faire pour éviter la VA
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| var
Doc :TXMLDocument;
begin
Doc := TXMLDocument.Create(nil);
try
Doc.LoadFromFile(aFileName);
...
finally
if Assigned(Node) then
(Doc.Node as IXMLNodeAccess).ClearDocumentRef();
Doc.Free;
end;
end; |
Mais sabs Owner, la gestion des compteurs de références des interfaces c'est juste une misère ...
en particulier avec FindNode qui perd ses références

, comme j'ai des objets XML construit dynamiquement sans Form ... j'ai fait dans le tordu ...
1 2 3 4 5 6
| XMLDoc := TXMLDocument.Create(TComponent.Create(nil)); // Le Owner stabilise les interfaces IXMLNode libéré à tord et à travers !
try
...
finally
XMLDoc.Owner.Free();
end; |
Tu devrais réorganiser ton code et découper la lecture de chaque node en sous-fonction qui s'appelle mutuellement et remplisse le DataSet ...
Sinon le XML cela peut-être récursif, pour certaines des applis dont j'ai la maintenance en charge c'est ce qui se passe, une fois parti sur IXMLNode ou sur IXMLNodeList, il n'y a aucun soucis de parcours même pour les noeuds au nom similaire (je serais embêté sinon) ... je suis étonné de l'utilisation de NextSibling (basé sur FindSibling) qui est plus lent qu'un For ChildNodes ... as-tu eu des problèmes avec Count ?
Partager