[Lazarus] Memory leaks when I read an XML file
Pierre Delore
dpliste at free.fr
Mon Jan 11 16:19:34 CET 2010
Hi Yves,
Thanks for your remark. I will modify the code.
Regards,
--
Pierre Delore
http://datalinkwristapps.free.fr
http://dpsite.free.fr
----- esby at free.Fr a écrit :
> Besides what you corrected, the various 'exit' statement in your code
> will leave an xdoc unfreed.
>
> Pierre Delore wrote:
> > Hi,
> >
> > I'm finishing to develop an application. Everything works fine.
> Yesterday I made some tests and I noticed that I have a huge memory leak
> when I try to load new data.
> >
> > I load 6000 lines of data that I transfer in TFPObjectList. I first
> thought that the problem came from the list. I removed the list code and
> the problem doesn't disappear. So, for me, the problem come from the XML
> reading procedure. I try to search in the wiki and I didn't found thing
> that help me. I sure that the method I use to read the XML is not right
> one.
> >
> > Somebody can help me to correct my code?
> >
> >
> > The method without TFPObjectList code is below. Before reading the file
> the program use 16Mo of memory. After the execution of the 'LoadCGX'
> procedure the program use 204Mo :( .
> >
> >
> >>
> -------------------------------------------------------------------------------------------------------------------
> > procedure TCGData.LoadCGX(s:String);
> > var
> > xdoc: TXMLDocument; // variable to document
> > RootNode,
> > node, node1, TrackpointNode : TDOMNode; // variable to nodes
> > i, j, err : Integer;
> > tmpCourseName : string;
> > tmpDescription : string;
> > tmps, tmps1 : string;
> > tmpTotalDistance,td : Double;
> > tmpVersion : String;
> > tmpTotalTimeSecond : integer;
> > ts : String;
> > Begin
> >
> > DateSeparator:='/';
> > ShortDateFormat:='d/m/y';
> >
> > //-- Open the XML file --
> > ReadXMLFile(xDoc, s);
> >
> >
> > //-- Search the <CourseGenerator> node --
> > RootNode := xDoc.FindNode('CourseGenerator');
> >
> > if RootNode=NIL then exit; //Not found exit
> >
> > For i:=0 to (RootNode.ChildNodes.Count - 1) do begin
> > Node:=RootNode.ChildNodes.Item[i];
> > tmps:=Node.NodeName;
> >
> > if tmps='Version' then begin
> > //-- <Version> node --
> > tmpVersion:= Node.TextContent;
> > //Todo: test!
> > end
> > else if tmps='TotalDistance' then begin
> > //-- <TotalDistance> node --
> > Val(Node.TextContent,tmpTotalDistance,err);
> > if err<>0 then exit;
> > end
> > else if tmps='TotalTimeSecond' then begin
> > //-- <TotalTimeSecond> node --
> > Val(Node.TextContent,tmpTotalTimeSecond,err);
> > if err<>0 then exit;
> > end
> > else if tmps='CourseName' then begin
> > //-- <CourseName> node --
> > tmpCourseName:= Node.TextContent;
> > end
> > else if tmps='Description' then begin
> > //-- <Description> node --
> > tmpDescription:= Node.TextContent;
> > end
> >
> > else if tmps='Trackpoint' then begin
> > //-- <Trackpoint> node --
> > TrackpointNode := Node;
> >
> > //-- Scan level "trackpoint" --
> > for j := 0 to (TrackpointNode.ChildNodes.Count - 1) do begin
> > Node1:=TrackpointNode.ChildNodes.Item[j];
> > tmps1:=Node1.NodeName;
> >
> > if tmps1 = 'LatitudeDegrees' then begin
> > //<LatitudeDegrees>123.456</LatitudeDegrees>
> > val(Node1.TextContent,td,err);
> > if err<>0 then begin
> > td:=0;
> > //Error
> > end;
> > end
> > else if tmps1 = 'LongitudeDegrees' then begin
> > //<LongitudeDegrees>123.456</LongitudeDegrees>
> > val(Node1.TextContent,td,err);
> > if err<>0 then begin
> > td:=0;
> > //Error
> > end;
> > end
> > else if tmps1 = 'AltitudeMeters' then begin
> > //<AltitudeMeters>123.456</AltitudeMeters>
> > val(Node1.TextContent,td,err);
> > if err<>0 then begin
> > td:=0;
> > //Error
> > end;
> > end;
> > end; //For j
> > //-- Store data --
> > //List.Add(TmpData);
> > end;
> > end; //For i
> >
> >
> > RootNode.free;
> > xDoc.Free;
> >
> > End;
> >>
> -----------------------------------------------------------------------------------------------------
> >
> >
> > Thanks for your help.
> >
> > Regards,
> >
>
>
> --
> Yves Tennevin / esby <dot> free.fr
>
> http://esby.free.fr/contact.html
>
>
> --
> _______________________________________________
> Lazarus mailing list
> Lazarus at lists.lazarus.freepascal.org
> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus/attachments/20100111/e8806e56/attachment-0004.html>
More information about the Lazarus
mailing list