首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Delphi6的MSXML库在Delphi5中泄漏内存?

为什么Delphi6的MSXML库在Delphi5中泄漏内存?
EN

Stack Overflow用户
提问于 2012-04-18 03:59:47
回答 4查看 752关注 0票数 0

我们有一个使用Delphi 5开发的应用程序,由于某些在这里不重要的原因,我们不能升级到Delphi 6或更高版本。

不久前,我们必须在应用程序中实现XML处理,我决定复制我们使用Delphi6为其他应用程序实现的实现。

一切都很顺利。我翻译了Delphi6源代码(msxml.pas、xmldoc.pas、msxmldom.pas等)。对于Delphi 5,必须对每个文件进行细微的调整(例如,删除使用的变体)。它起作用了,但我在内存释放方面遇到了一些问题。

我认为这个问题与Delphi 5和Delphi 6如何实现接口有关。我只是把接口和它们的实现从Delphi6复制到了Delphi5。Delphi没有正确释放内存。通过对代码进行调试,我们确定问题的根源在于XMLDoc.pas上的TXMLDocument.ReleaseDoc。看起来FDOMDocument := nil这一行并没有释放它应该释放的内存。

有人能在这方面给我一些帮助吗?如果我们不能解决这个问题,我们将不得不使用另一个XML库重新编码整个代码。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-05-25 02:50:41

非常感谢你们..。

我不知道为什么要这样做,但在将Delphi6文件复制到Delphi5时,我更改了这一行

Result := inherited _Release;Result := 0; //inherited _Release;

function TXMLNode._Release: Integer;

改回来了。经过测试,Delphi5程序开始像Delphi6一样运行。

再次感谢您的宝贵时间!

票数 1
EN

Stack Overflow用户

发布于 2012-04-18 05:41:50

Delphi 6以与Delphi 5相同的方式释放接口对象。

你需要调试来找出你的Delphi5程序出错的地方。

从一个小的测试用例开始,它演示了内存不会被释放。在两个版本的Delphi中运行它,以确认该问题仅在Delphi 5中出现。

如果可能,也可以在Delphi6测试用例中使用您的Delphi5版本的XML库。否则,当您将该库转换到Delphi 5时,您不能确定不是自己引入了这个问题。

票数 4
EN

Stack Overflow用户

发布于 2012-04-18 10:14:24

仔细检查FDOMDocument在这两种情况下实际上都是一个接口,否则如果'FDOMDocument := nil‘是一个对象引用,它只会泄漏。

还要确认您没有持有另一个会阻止ReleaseDoc释放它的对FDOMDocument的引用。

尤其要注意接口上的循环引用!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10198244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档