找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6565|回复: 0
打印 上一主题 下一主题
收起左侧

关于DELPHI ADO内存得不到释放的问题

[复制链接]
跳转到指定楼层
楼主
ID:262 发表于 2014-5-20 16:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一程序使用ADO动态创建TADOQuery类,使用中发现每次open后,内存都得不到释放,无论free,close后都都到释放,N次运行后内存终会崩掉,上CSDN、GOOGLE中文都无法得到正解的解释。纠结许久,终看到一老外的ADO类的源码分析,恍然大悟。

TADOQuery = class(TCustomADODataSet)
...
constructor TCustomADODataSet.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FCommand := TADOCommand.Create(Self);
...
destructor TADOQuery.Destroy;
begin
// Problem: destroy before delete of members
inherited Destroy;
FreeAndNil(FSQL);
end;
destructor TADOCommand.Destroy;
begin
// The same problem: destroy before delete of members
inherited Destroy;
Connection := nil;
FCommandObject := nil;
FreeAndNil(FParameters);
end;
See this discussion:
groups.google.ru/groups&lr=&threadm=41ed54ce%241%40newsgroups.borland.com&rnum=6&prev=/groups%3Fas_q%3DTADOCommand%26as_ugroup%3D*borland*%26as_scoring%3Dd%26lr%3D%26num%3D20%26hl%3Dru
Possible workarounds:
- don't create TADOQuery and TADOCommand dynamically (use some static
instances), "ignore small leak" on terminating of application;
- patch adodb.pas ...
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表