- Код: Выделить всё
procedure T1DPC.LoadFromFile(const XMLFileName: String);
var XML:TXMLDocument;
Node,NodeLayer: TDOMNode;
List:TDOMNodeList;
PLayer:PLayer1DPC;
I:integer;
begin
Try
// Читаем xml файл с жесткого диска
ReadXMLFile(XML, XMLFileName);
XML.AfterConstruction;
List:=XML.DocumentElement.ChildNodes;
Node:=List[0];
if Node.NodeName='Properties' then
begin
Self.Name:=Node.Attributes.GetNamedItem('Name').NodeValue;
Self.Description:=Node.Attributes.GetNamedItem('Description').NodeValue;
Self.EpsilonFirst.Re:=StrToFloat(Node.Attributes.GetNamedItem('EpsilonF_Re').NodeValue);
Self.EpsilonFirst.Im:=StrToFloat(Node.Attributes.GetNamedItem('EpsilonF_Im').NodeValue);
Self.EpsilonLast.Re:=StrToFloat(Node.Attributes.GetNamedItem('EpsilonL_Re').NodeValue);
Self.EpsilonLast.Im:=StrToFloat(Node.Attributes.GetNamedItem('EpsilonL_Im').NodeValue);
end;
finally
XML.Free;
XML:=Nil;
end;
end;//procedure T1DPC.LoadFromFile(const XMLFileName: String);
Все работает ок. При загрузке съедается память, при чем именно XML есть а не сам класс*, так как он уже создан и идет заполнение полей. Данная память освобождается при сворачивании программы, как это реализовать программно, возможно послать какое-то вин сообщение окну? Потому что при работе программы «при автопилоте», идет чтение иногда до 1000 xml файлов, из за чего выделяется до 1GB. (что шокирует некоторых). Если после работы программу свернуть, выделенной памяти будет порядка 800 килобайт.
Как освобождать после каждого применения процедуры.
* - если заполнять свойства ну скажем в цикле (for i:=1 to 1000 do) то никакой утечки нет.
Заранее Спасибо.