我有一个 Delphi 11应用程序,可以做基本的提取/转换/加载。我正在使用DevArt的UniDAC进行数据库连接。我在Windows Server上运行...我正在从Oracle DB阅读数据并向MSSQL数据库写入数据。
我以前从未遇到过这种情况,但这是我们第一次从Oracle DB中处理超过700万条记录。
基本上-我有两个UniConnections(Oracle和MSSQL)-和一些UniQueries来处理从Oracle读取和插入MSSQL。
问题是,程序只是不断消耗越来越多的内存-直到我得到大约350万条记录-在这一点上,我得到了内存错误。这台机器有16 GB的内存,我试过各种各样的事情-关闭和打开UniQueries每500条记录,我也试过关闭和打开UniConnection -没有任何工作。我想如果我正在关闭数据库连接-那么它应该会为这些对象释放内存-但看起来它并没有这样做。我甚至尝试释放UniQueries,重新创建和重新打开它们-仍然是相同的问题。直到关闭应用程序,内存才最终被释放。
我已经运行了Deleaker,它没有报告任何内存泄漏。我不知道是什么导致了这一切!这是一个相当直接的ETL程序-没有备注字段,只有字符串,数字和日期字段。没有大的处理,只是组合一些字符串,然后将其写入MSSQL表。
对于 Delphi 的人来说,如果你关闭了一个TQuery,它使用的内存不应该被回收吗?如果你释放物体呢?
有什么想法我会感激如果我还能去哪里找?我已经到了我将不得不为记录的子集运行程序-关闭它-然后再次打开它,并运行它为下一个‘X‘记录-并重复,直到我完成所有记录...但这是一个短期的解决方案,我需要一个真实的的解决方案。
谢谢你的好意
布拉德利·麦克唐纳
1条答案
按热度按时间j8ag8udp1#
为了研究这个问题,我们需要一个简单的例子,说明在执行时会出现内存泄漏。请联系我们的支持团队解决此问题。