Delphiを使用して、リレーショナルデータベースのデータからXMLドキュメントを作成しています。小さなデータセットでも問題なくテストできますが、データセットのサイズを本番レベルに拡張しようとすると、ノードの作成中にEOutOfMemory例外が発生します。
フォームにドロップされたTXMLDocument(ベンダーとしてMSXML)を使用していますが、コードは通常次のようになります。
DS := GetDS(Conn, 'SELECT Fields. . . FROM Table WHERE InsuredID = ' +IntToStr(AInsuredID));
try
while not DS.Eof do
with ANode.AddChild('LE') do
begin
AddChild('LEProvider').Text := DS.FieldByName('LEProvider').AsString;
// Need to handle "other" here
AddChild('Date').Text := DateToXMLDate(DS.FieldByName('LEDate').AsDateTime);
AddChild('Pct50').Text := DS.FieldByName('50Percent').AsString;
AddChild('Pct80').Text := DS.FieldByName('80Percent').AsString;
AddChild('Actuarial').Text := DS.FieldByName('CompleteActuarial').AsString;
AddChild('Multiplier').Text := DS.FieldByName('MortalityMultiplier').AsString;
DS.Next;
end;
finally
DS.Free;
end;
このセクション、およびさまざまなデータベーステーブルに適用される他の多くの同様に構築されたセクションでは、何度も実行されました。この例では、ANodeは、コンテナーとして使用するために関数に渡されるIXMLNodeです。
結果として得られるディスク上のXMLファイルが10メガバイトを超えるとは思わない。XMLNodeの作成と廃棄でメモリリークが発生していると思いますが、問題を追跡する方法を理解するのに十分なインターフェイスに精通していません。