gpt4 book ai didi

xml - EOutOfMemory 使用 Delphi 创建大型 XML

转载 作者:行者123 更新时间:2023-12-03 18:34:37 25 4
gpt4 key购买 nike

我正在使用 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 时以某种方式泄漏了内存,但我对接口(interface)不够熟悉,不知道如何追踪我的问题。

最佳答案

TXMDocument 是一个 DOM 风格的界面,将整个文档保存在内存中。那样内存会很快用完。即使生成的文件不是那么大。您实际上并不需要 TXMLDocument 来写出一个简单的 XML。为什么不直接写入 xml 格式的文件?

话虽这么说:这也可能是由于堆碎片或真正的内存泄漏而导致的错误。您可能想尝试这里提到的工具:Profiler and Memory Analysis Tools for Delphi

关于xml - EOutOfMemory 使用 Delphi 创建大型 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1499717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com