我正在使用 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 兆字节。我假设我在创建和处理 XMLNodes 时以某种方式泄漏了内存,但我对接口不够熟悉,不知道如何追踪我的问题。