首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Delphi中使用RemObjects和COM对象进行内存泄漏

在Delphi中使用RemObjects和COM对象进行内存泄漏
EN

Stack Overflow用户
提问于 2012-12-29 00:54:42
回答 1查看 440关注 0票数 0

我有一个在Delphi上用DMO创建的webservice和一个发布的函数,他的工作需要使用com对象(特别是使用RemObjects连接到数据库)。我检测到,当我多次调用此函数时,使用when服务的内存急剧增加。

内存泄漏的原因是为com对象保留的内存永远不会被释放。

我要怎么做才能解决这个问题?

谢谢

代码:

代码语言:javascript
复制
constructor TA.Create;
begin
    inherited Create;
    oServer := CoSQLServer.Create;
end;

destructor TA.Destroy;
begin
   oServer := nil;
end;

声明

代码语言:javascript
复制
class function CoSQLServer.Create: _SQLServer;
begin
    Result := CreateComObject(CLASS_SQLServer) as _SQLServer;
end;
EN

回答 1

Stack Overflow用户

发布于 2012-12-29 05:08:56

在您展示的代码中,我们唯一可以批评的是您的析构函数:

代码语言:javascript
复制
destructor TA.Destroy;
begin
  oServer := nil;
end;

nil赋值给oServer是没有意义的(尽管是无害的),因为这将自动发生。

但是这里缺少的是对继承的析构函数的调用。所以,你的析构函数应该是这样的:

代码语言:javascript
复制
destructor TA.Destroy;
begin
  oServer := nil;
  inherited;
end;

现在,如果您决定删除oServer的终止,那么您可以简单地从您的类中删除析构函数,并依赖于基类的析构函数。

但是,您似乎使用了一个无效的工具来测量内存泄漏。你不能用任务管理器来测量内存泄漏。使用FastMM检漏仪。

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

https://stackoverflow.com/questions/14072917

复制
相关文章

相似问题

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